我有一个疯狂的小方法,可以将BigDecimal值转换成漂亮的、可读的字符串。
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
我确实需要分隔符是点或点,而不是逗号。有谁知道如何完成这个小小的壮举吗?
我现在已经读过this,特别是this to death,但我找不到一种方法来完成这项工作。我是不是走错了路?有没有更优雅的方式来做这件事呢?也许甚至会有一种解决方案来说明不同的本地数字表示,因为逗号按照欧洲的标准是完美的。
发布于 2011-02-20 07:33:16
欧洲是相当大的。我不确定它们是否全部使用相同的格式。不过,this或this answer将会有所帮助。
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);
即使用正确的区域设置。
发布于 2011-10-15 22:28:48
public String getGermanCurrencyFormat(double value) {
NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN);
nf.setGroupingUsed(true);
return "€ " + nf.format(value);
}
发布于 2012-03-26 23:18:47
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
我编辑了我的消息中没有意义的一部分,因为它被证明是由于人为错误(忘记提交数据和查看错误的东西)。
对于任何Java .toString()函数,都可以说与BigDecimal相同。我想这在某些方面是好的。例如序列化或调试。有一个唯一的字符串表示。
同样,正如其他人提到的,使用格式化程序工作正常。只需使用格式化程序,对于JSF前端也是如此,格式化程序可以正确地完成工作,并且能够识别区域设置。
https://stackoverflow.com/questions/5054132
复制相似问题