如何将DecimalFormat的小数点分隔符从逗号更改为点/点?

我有这个小疯狂的方法,将BigDecimal值转换成漂亮和可读的string。

private String formatBigDecimal(BigDecimal bd){ DecimalFormat df = new DecimalFormat(); df.setMinimumFractionDigits(3); df.setMaximumFractionDigits(3); df.setMinimumIntegerDigits(1); df.setMaximumIntegerDigits(3); df.setGroupingSize(20); return df.format(bd); } 

然而,它也产生了一个所谓的分组分隔符","这使得我所有的价值观都是这样出现的:

 xxx,xxx 

我确实需要分隔符是点或点而不是逗号。 有没有人知道如何完成这个小小的壮举?

我已经阅读了这个 ,特别是现在这个死亡,但我找不到一个办法来完成这件事。 我以错误的方式接近了吗? 有没有更好的方法来做到这一点? 也许即使是一个解决scheme,不同的本地号码表示,因为逗号将是完美的欧洲标准。

您可以通过设置区域设置或使用DecimalFormatSymbols来更改分隔符。

如果您希望分组分隔符是一个点,则可以使用欧洲语言环境:

 NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN); DecimalFormat df = (DecimalFormat)nf; 

或者,您可以使用DecimalFormatSymbols类来更改由format方法生成的格式化数字中出现的符号。 这些符号包括小数点分隔符,分组分隔符,减号和百分号等等:

 DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(currentLocale); otherSymbols.setDecimalSeparator(','); otherSymbols.setGroupingSeparator('.'); DecimalFormat df = new DecimalFormat(formatString, otherSymbols); 

currentLocale可以从Locale.getDefault()获得,即:

 Locale currentLocale = Locale.getDefault(); 
 public String getGermanCurrencyFormat(double value) { NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN); nf.setGroupingUsed(true); return "€ " + nf.format(value); } 

欧洲相当庞大。 我不确定他们是否全部使用相同的格式。 然而, 这个或这个答案将是有帮助的。

 String text = "1,234567"; NumberFormat nf_in = NumberFormat.getNumberInstance(Locale.GERMANY); double val = nf_in.parse(text).doubleValue(); NumberFormat nf_out = NumberFormat.getNumberInstance(Locale.UK); nf_out.setMaximumFractionDigits(3); String output = nf_out.format(val); 

即使用正确的语言环境。

BigDecimal似乎不尊重区域设置。

 Locale.getDefault(); //returns sl_SI 

斯洛文尼亚语区域应该有一个十进制逗号。 猜猜我对数字有着奇怪的误解。

 a = new BigDecimal("1,2") //throws exception a = new BigDecimal("1.2") //is ok a.toPlainString() // returns "1.2" always 

我编辑了一部分我没有意义的信息,因为它certificate是由于人为错误(忘记提交数据,看错了一些东西)。

与BigDecimal相同,可以说是任何Java .toString()函数。 我想这在某些方面是好的。 序列化或debugging。 有一个唯一的string表示。

也正如其他人提到使用格式化程序工作正常。 只要使用格式化程序,就像JSF前端一样,格式化程序可以正确地完成这项工作,并且知道区域设置。

 String money = output.replace(',', '.'); 

只要replace'。' 在UI端用','

 import java.text.DecimalFormat; public MyClass{ private String netAmount; private static DecimalFormat twoDecimalForm = new DecimalFormat("00.00"); public MyClass(double amount){ //converting to required decimal format in constructor or/and setter this.amount=twoDecimalForm.format(amount); } public String getAmount() { //replacing decimal point with comma so that in JSP ELs you'll get it in comma format return amount.replace(".",","); } public void setAmount(String amount) { this.amount = amount; } } 
Interesting Posts