【问题标题】:Java - NumberValue to String without Currency signJava - NumberValue 到没有货币符号的字符串
【发布时间】:2019-06-23 16:09:34
【问题描述】:

我正在尝试将 NumberValue 格式化为当前语言环境格式的字符串。

例如,对于 Locale.Germany,这些将是我想要得到的结果:

1   -> 1,00
1.1 -> 1,10
0.1 -> 0,10

我尝试过的:

String test1 = NumberFormat.getInstance().format(1.1);
// -> 1,1
String test2 = NumberFormat.getCurrencyInstance().format(1.1);
// -> 1,10 €

如果没有货币符号,如何获得与第二个示例相同的格式?或者,我如何确保第一个示例的结果始终具有当前语言环境所需的小数位数?

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

另外,有些货币的符号在前面,有些在后面,所以删除最后一个字符可能也不起作用。

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

【问题讨论】:

  • 1.1 -> 1,01 有什么意义?这是什么逻辑?
  • @ernest_k,抱歉,打错了。我会更正它(下面的也是)。
  • NumberFormat instance = NumberFormat.getInstance(); instance.setMinimumFractionDigits(2);
  • @davidxxx 这适用于所有语言环境/货币吗?我曾假设有些可能会使用更多或更少的小数。编辑:我找到了一个列表,有一些列表有 0 或 3:apps.cybersource.com/library/documentation/sbc/quickref/…
  • @dkb,感谢您的链接,但我似乎遗漏了一些东西 - 该示例似乎使用与我的第二个示例相同的功能,结果相同。

标签: java locale number-formatting


【解决方案1】:

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

NumberFormat numberFormat = NumberFormat.getInstance(myLocale);
Currency currency = Currency.getInstance(myLocale);
numberFormat.setMinimumFractionDigits(currency.getDefaultFractionDigits());

如果您需要特定货币而不是您使用的语言环境的默认货币,请改用the String override of Currency.getInstance() 并提供适当的货币代码。

【讨论】:

  • 我实际上比链接的解决方案更喜欢这个解决方案,它看起来不像是一种解决方法。非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-29
  • 1970-01-01
  • 2019-02-23
  • 2012-09-04
相关资源
最近更新 更多