【问题标题】:Java decimal formatting using String.format?使用 String.format 的 Java 十进制格式?
【发布时间】:2009-01-11 23:08:55
【问题描述】:

我需要将一个十进制值格式化为一个字符串,我总是显示至少 2 个小数,最多 4 个。

例如

"34.49596" would be "34.4959" 
"49.3" would be "49.30"

这可以使用 String.format 命令完成吗?
或者在 Java 中有没有更简单/更好的方法来做到这一点。

【问题讨论】:

    标签: java formatting decimal


    【解决方案1】:

    是的,您可以使用String.format

    String result = String.format("%.2f", 10.0 / 3.0);
    // result:  "3.33"
    
    result = String.format("%.3f", 2.5);
    // result:  "2.500"
    

    【讨论】:

    • 这可能不是问题的正确答案,但这是我来这里寻找的答案。谢谢!
    【解决方案2】:

    你想要 java.text.DecimalFormat。

    DecimalFormat df = new DecimalFormat("0.00##");
    String result = df.format(34.4959);
    

    【讨论】:

    • 按照同样的例子你会得到错误的结果。对于此特定示例,您需要使用 RoundingMode.DOWN。否则,它使用 HALF_EVEN。不,虽然是负面的。
    【解决方案3】:

    这是一个完成这项工作的小代码sn-p:

    double a = 34.51234;
    
    NumberFormat df = DecimalFormat.getInstance();
    df.setMinimumFractionDigits(2);
    df.setMaximumFractionDigits(4);
    df.setRoundingMode(RoundingMode.DOWN);
    
    System.out.println(df.format(a));
    

    【讨论】:

    • 没有否定,但您的代码在原始海报给出的第一个示例中失败。需要使用RoundingMode.DOWN,否则我想默认使用HALF_EVEN。
    【解决方案4】:

    java.text.NumberFormat 可能是你想要的。

    【讨论】:

      【解决方案5】:

      NumberFormat 和 DecimalFormat 绝对是您想要的。另外,请注意NumberFormat.setRoundingMode() 方法。您可以使用它来控制在格式化期间如何应用舍入或截断。

      【讨论】:

        【解决方案6】:

        你想要 java.text.DecimalFormat

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-07-22
          • 2012-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-30
          • 2017-11-11
          相关资源
          最近更新 更多