如何使用java.util.Formatter将双精度格式转换为千分位和2位小数

如何使用java.util.Formatter将双精度格式转换为千分位和2位小数,java,Java,我想将一个双精度值格式化为 货币格式符号 四舍五入到小数点后2位的值 带千位分隔符的最终值 专门使用java.util.Formatter类 示例:- double amount = 5896324555.59235328; String finalAmount = ""; // Some coding System.out.println("Amount is - " + finalAmount); 应该是: 金额为-5896324555.60美元 我搜索了一下,但我不能很好地理解Oracl

我想将一个双精度值格式化为

  • 货币格式符号
  • 四舍五入到小数点后2位的值
  • 带千位分隔符的最终值
  • 专门使用java.util.Formatter类

    示例:-

    double amount = 5896324555.59235328;
    String finalAmount = "";
    // Some coding
    System.out.println("Amount is - " + finalAmount);
    
    应该是:
    金额为-5896324555.60美元

    我搜索了一下,但我不能很好地理解Oracle文档或其他教程,我发现这个链接非常接近我的要求,但不是Java-

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

    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
    

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

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

    Amount is - $5,896,324,555.59
    

    要凑到60美分,您需要
    59.5
    美分(或更多)

    如果需要使用
    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);
    

    在页面的示例代码上展开。

    您显然没有搜索到足够的。。。有很多关于格式化程序类的问题。另请参见关于千位分隔符的内容……不要将double用作货币。使用BigDecimal@杰瑞·安德鲁斯:有什么特别的原因吗?当然,大十进制总是给你无限的精度。浮点和双精度运算将引入舍入误差。典型的例子总是四舍五入。考虑这篇文章(谷歌搜索Java java第三进制结果的结果):这个方法工作了,虽然它不是格式化程序类。非常感谢。这是我真正期望的。非常感谢。没关系。而且,如果您想从特定的美元符号中提取代码,应该使用
    Currency.getInstance(locale).getSymbol(locale)