我尝试将此字符串解析为大十进制,逗号替换为点。
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();
}