Java - NumberValue 到没有货币符号的字符串

Sir*_*nce 2 java locale number-formatting

我正在尝试将 NumberValue 格式化为当前区域设置格式的字符串。

\n\n

例如,对于 Locale.Germany,这些将是我试图获得的结果:

\n\n
1   -> 1,00\n1.1 -> 1,10\n0.1 -> 0,10\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试过的:

\n\n
String test1 = NumberFormat.getInstance().format(1.1);\n// -> 1,1\nString test2 = NumberFormat.getCurrencyInstance().format(1.1);\n// -> 1,10 \xe2\x82\xac\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何获得与第二个示例相同的格式,而不使用货币符号?或者,我如何确保第一个示例的结果始终具有当前区域设置所需的小数位数?

\n\n

编辑:由于有些货币有 0、2 或 3 位小数,我认为将小数设置为固定金额不会产生正确的结果。

\n\n

此外,有些货币的符号在前面,有些在后面,因此切断最后一个字符可能也不起作用。

\n\n

http://apps.cybersource.com/library/documentation/sbc/quickref/currencies.pdf

\n

Joa*_*uer 5

java.util.Currency提供必要的信息。在纯 Java 代码中打印没有货币符号的货币值的合理方法是获取一个通用NumberFormat实例并将其配置为使用适当对象定义的位数Currency

NumberFormat numberFormat = NumberFormat.getInstance(myLocale);
Currency currency = Currency.getInstance(myLocale);
numberFormat.setMinimumFractionDigits(currency.getDefaultFractionDigits());
Run Code Online (Sandbox Code Playgroud)

如果您需要特定货币而不是您使用的区域设置的默认货币,请使用替代StringCurrency.getInstance()提供适当的货币代码。

  • 这是迄今为止我最喜欢的答案,但它并不完美。“大多数货币使用与区域设置中其他数字相同的小数和千位分隔符,但这并不总是正确的。在瑞士的某些地方,他们使用句点作为瑞士法郎的小数分隔符(Sfr.127.54),但随后在其他地方使用逗号作为小数点分隔符 (127,54)。” - https://learn.microsoft.com/en-us/globalization/locale/currency-formatting (3认同)