【问题标题】:java: get different parts of NumberFormat.getCurrencyInstance() resultjava:获取 NumberFormat.getCurrencyInstance() 结果的不同部分
【发布时间】:2017-08-09 16:24:50
【问题描述】:

在 Java 中,使用 NumberFormat.getCurrencyInstance(),我可以获得一个表示价格的格式化字符串。例如

NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.GERMANY);
System.out.println(nf.format(20.10)); // "20,10 €"

有没有一种简单的方法来获取这个格式化字符串的不同部分?即类似

integerPart -> 20
decimalPart -> 10
currencySymbol -> €
decimalSeparator -> ,

谢谢!

【问题讨论】:

  • 为什么需要做这件事?

标签: java currency number-formatting


【解决方案1】:

你真的要求两个不同的东西:

  1. integerPartdecimalPart 属于 input 值。它们可以用一些简单的数学计算出来:

    double input = 20.10;
    int integerPart = (int)input; // 20
    int decimalPart = (int)((input - integerPart) * 100); // 10
    
  2. currencySymboldecimalSeparator输出 值相关。可以使用DecimalFormatSymbols 类检索它们:

    DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance(Locale.GERMANY);
    String currencySymbol = symbols.getCurrencySymbol(); // €
    char decimalSeparator = symbols.getDecimalSeparator(); // ,
    

【讨论】:

  • 谢谢!但不完全同意 1。假设输入为 20.0163,则所需的小数部分为“02”。我知道我仍然可以通过一些处理得到它,但是由于 NumberFormat 已经完成了这项工作,我想尽可能选择结果。
  • @lznt 只需使用(int)Math.round((input - integerPart) * 100) 或任何其他舍入方法。
  • 既然 NumberFormat 已经完成了这项工作,我想尽可能选择结果。 结果只是一个字符串。当然,如果你真的想要的话,你可以用正则表达式把它切碎。但这似乎是一种倒退的做事方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-12
  • 1970-01-01
  • 2017-04-26
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
相关资源
最近更新 更多