带句点和逗号的自定义格式化数字

gle*_*roo 2 java formatting

此问题有关,还有一些与格式小数相关的其他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吗?或者我需要自定义格式化程序吗?

Dav*_*ant 7

你应该避免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.