【问题标题】:How to format a double into thousand separated and 2 decimals using java.util.Formatter如何使用 java.util.Formatter 将双精度格式化为千位分隔和 2 位小数
【发布时间】:2016-04-03 18:01:59
【问题描述】:

我想将一个双精度值格式化为具有的样式

  1. 货币格式符号
  2. 值四舍五入到小数点后 2 位
  3. 带有千位分隔符的最终值

具体使用 java.util.Formatter 类

示例:-

double amount = 5896324555.59235328;
String finalAmount = "";
// Some coding
System.out.println("Amount is - " + finalAmount);

应该是这样的:- Amount is - $ 5,896,324,555.60

我搜索了,但我无法理解 Oracle 文档或其他教程,我发现这个链接非常接近我的要求,但它不是 Java - How to format double value into string with 2 decimal places after dot and with separators of thousands?

【问题讨论】:

  • 你显然搜索的不够多……关于 Formatter 类的问题很多。另请参阅stackoverflow.com/questions/5323502/… 关于千位分隔符..
  • ...并且不要使用 double 作为货币。使用 BigDecimal。 ;)
  • @Jerry Andrews 有什么特别的原因吗?
  • 当然——BigDecimal 总是给你无限的精度。 float 和 double 操作会引入舍入误差。典型的例子总是四舍五入。考虑这篇文章(谷歌搜索“Java BigDecimal Currency”的第三个结果):blogs.oracle.com/CoreJavaTechTips/entry/the_need_for_bigdecimal

标签: java


【解决方案1】:

我强烈建议不要使用java.util.Formatter,而是使用带有内置货币格式化程序的java.text.NumberFormat

double amount = 5896324555.59235328;
NumberFormat formatter = NumberFormat.getCurrencyInstance();
String finalAmount = formatter.format(amount);
System.out.println("Amount is - " + finalAmount); 
// prints: Amount is - $5,896,324,555.59

【讨论】:

  • 这个方法有效,虽然它不是 Formatter 类。谢谢!
【解决方案2】:

您可以使用printf 和格式规范,例如

double amount = 5896324555.59235328;
System.out.printf("Amount is - $%,.2f", amount);

输出是

Amount is - $5,896,324,555.59

要四舍五入到 60 美分,您需要 59.5 美分(或更多)。

【讨论】:

    【解决方案3】:

    如果您需要使用java.util.Formatter,这将起作用:

    double amount = 5896324555.59235328;
    StringBuilder sb = new StringBuilder();
    Formatter formatter = new Formatter(sb, Locale.US);
    formatter.format("$ %(,.2f", amount);
    System.out.println("Amount is - " + sb);
    

    扩展了来自Formatter 页面的示例代码。

    【讨论】:

    • 这是我真正期望的。谢谢!
    • 没关系。而且,如果你想从特定的美元符号中抽象出你的代码,你应该使用Currency.getInstance(locale).getSymbol(locale)
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多