与此问题有关,还有一些与格式小数相关的其他SO问题(在这种情况下,所有这些都没有帮助我).
我正在尝试将Long格式化为一个字符串,例如123456 - > 012.345,6(句号后面跟逗号看起来很奇怪,这是项目要求).
我正在尝试使用DecimalFormat进行格式化:
private static final DecimalFormat format = new DecimalFormat("## 0.000,0");
但是它在实例化期间抛出异常:
java.lang.IllegalArgumentException:格式错误的模式"## 0.000,0"
我还预先尝试将区域设置更改为EU系统,例如
NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.GERMAN);
如何以这种方式格式化数字?DecimalFormat是错误的解决方案吗?我可以使用NumberFormat吗?或者我需要自定义格式化程序吗?
你应该避免DecimalFormat直接构建.无论它们在目标语言环境中的显示方式如何,逗号始终用于在模式定义中进行分组.同样,句点总是用于小数.这似乎是不合逻辑的,但必须记住这是一个 模式定义,和#一样,这些字符描述的是替换,而不是字符本身.
NumberFormat f = NumberFormat.getInstance(Locale.GERMANY);
if (f instanceof DecimalFormat) {
((DecimalFormat) f).applyPattern("##0,000.0");
}
f.format(123456 / 10.0);
Run Code Online (Sandbox Code Playgroud)
为了获得小数点后的数字,必须除以10.