如何在java中将带有美元符号的字符串数值转换为BigDecimal?

问题描述 投票:0回答:4

我有一个字符串格式的美元金额。 例如:字符串 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)
java string bigdecimal
4个回答
41
投票

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


8
投票

先删除美元符号($)。


3
投票

构造函数需要字符串中的数字,您的字符串以

$
开头,这不是有效的数字。你需要先把它去掉。


0
投票

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
实例。

© www.soinside.com 2019 - 2024. All rights reserved.