我有一个字符串格式的美元金额。 例如:字符串 salePrice = $348.00。
但是,我想将此 String 值转换为 BigDecimal 值,但它的字符串中有美元符号。我尝试了下面的代码,但它不起作用。
BigDecimal sPrice = new BigDecimal(salePrice);
我最终得到了下面这个异常:
java.lang.NumberFormatException
at java.math.BigDecimal.<init>(Unknown Source)
at java.math.BigDecimal.<init>(Unknown Source)
BigDecimal 构造函数采用有效的数字字符串。
字符串表示由一个可选的符号组成, '+' ('\u002B') 或 '-' ('\u002D'),后跟零或序列 更多十进制数字(“整数”),可选地后跟 分数,可选地后跟指数。
String salePrice = "$348.00";
String price = salePrice.replace("$","");
BigDecimal sPrice = new BigDecimal(price);
System.out.println(sPrice);
输出 =
348.00
您还可以查看 NumberFormat 类。使用这个类你可以设置相应的
Locale
。
String salePrice = "$123.45";
Locale locale = Locale.US;
Number number = NumberFormat.getCurrencyInstance(locale).parse(salePrice);
System.out.println(number);
输出 =
123.45
先删除美元符号($)。
构造函数需要字符串中的数字,您的字符串以
$
开头,这不是有效的数字。你需要先把它去掉。
import java.text.DecimalFormat;
var format = new DecimalFormat("$#,###.##", new DecimalFormatSymbols(Locale.US));
format.setParseBigDecimal(true);
return (BigDecimal) format.parse("$348.0");
另请参阅:https://www.baeldung.com/java-decimalformat#basic-formatting
注意(!)
DecimalFormat
不是线程安全的,因此,在服务中,每次解析之前都创建一个new
实例。