Java,将字符串解析为大十进制问题



我尝试将此字符串解析为大十进制,逗号替换为点。

String priceStr = "0,04";
DecimalFormat df = (DecimalFormat) NumberFormat.getInstance(Locale.US);
df.setParseBigDecimal(true);
df.setParseIntegerOnly(false);
BigDecimal price = null;
try {
        price = (BigDecimal) df.parseObject(priceStr);
    } catch (ParseException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

但是我得到一个整数而不是一个大十进制值(价格= 4(。知道吗?

0,04不是在美国区域设置中格式化的数字。

如果您希望从中解析的值是0.04,则需要使用另一个使用 , 作为小数分隔符的语言环境,例如 Locale.FRANCE .

如果要

将非美国本地十进制转换为美国本地十进制,则必须进行两次转换,即

String priceStr = "0,04";
DecimalFormat df = (DecimalFormat) NumberFormat.getInstance(Locale.GERMAN);
df.setParseBigDecimal(true);
df.setParseIntegerOnly(false);
BigDecimal price = null;
try {
    price = (BigDecimal) df.parseObject(priceStr);
} catch (ParseException e1) {
    e1.printStackTrace();
}
System.out.println(NumberFormat.getInstance(Locale.US).format(price));

如何检测它来自哪个区域设置?

您只需检查数字String是否包含.

DecimalFormat df = (priceStr.contains(".")) ? 
                      (DecimalFormat) NumberFormat.getInstance(Locale.US) :
                      (DecimalFormat) NumberFormat.getInstance(Locale.GERMAN);

试试这个:

String priceStr = "0,04";
DecimalFormatSymbols symbol=new DecimalFormatSymbols();
symbol.setDecimalSeparator(','); 
String Pattarn="#,##";
DecimalFormat df=new DecimalFormat(Pattarn, symbol);
df.setParseBigDecimal(true);
try {
    BigDecimal price = (BigDecimal) df.parse(priceStr);
} catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

最新更新