【问题标题】:Java: double: how to ALWAYS show two decimal digitsJava:d​​ouble:如何始终显示两位小数
【发布时间】:2013-06-08 06:11:01
【问题描述】:

我在我的项目中使用双精度值,我希望始终显示前两位十进制数字,即使它们是零。我使用此函数进行舍入,如果我打印的值为 3.47233322,它(正确)打印 3.47。但是,例如,当我打印值 2 时,它会打印 2.0。

public static double round(double d) {
    BigDecimal bd = new BigDecimal(d);
    bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
    return bd.doubleValue();
}

我要打印 2.00!

有没有办法在不使用字符串的情况下做到这一点?

编辑:根据您的回答(我感谢您)我知道我不清楚我在搜索什么(对此我很抱歉):我知道如何使用您提出的解决方案...我想要的是直接将两位数存储在双精度值中!所以当我做这样的事情System.out.println("" + d)(其中 d 是我的值为 2 的双精度数)时,它会打印 2.00。

我开始认为没有办法做到这一点......对吗?再次感谢您的回答,如果您知道解决方案,请告诉我!

【问题讨论】:

  • 我不认为你可以改变 java 存储双精度值的方式。您只能在呈现时修改它们的格式。
  • 是的...我认为您是对的...每次向用户展示我的值时,我都必须对其进行格式化...很多次!谢谢你的回答!
  • 好吧,你只需要编写一次格式化程序方法,我不会担心。 ; )

标签: java double number-formatting


【解决方案1】:

你可以这样使用:

 double d = 1.234567;
 DecimalFormat df = new DecimalFormat("#.00");
 System.out.print(df.format(d));

编辑以实际回答问题,因为我需要真正的答案,这出现在谷歌上,有人将其标记为答案,尽管当小数为 0 时这将不起作用。

【讨论】:

  • 我编辑了我的问题以澄清我正在搜索的内容。还是谢谢你!
  • 如果给定数字是0.3,我发现引用中的代码显示.30,所以我改用#0.00 模式,到目前为止效果很好
  • 对我来说,这个答案实际上是行不通的。这是我得到的:13310.0 13676.31 26600.2
【解决方案2】:

为此使用java.text.NumberFormat

NumberFormat nf= NumberFormat.getInstance();
nf.setMaximumFractionDigits(2);
nf.setMinimumFractionDigits(2);
nf.setRoundingMode(RoundingMode.HALF_UP);

System.out.print(nf.format(decimalNumber));

【讨论】:

  • 我编辑了我的问题以澄清我在搜索什么。还是谢谢你!
  • 恐怕即使使用此选项,问题仍然存在。它只是不会在小数点后打印两个零!仍在寻找对强迫症友好的解决方案14641.0 15180.7 15735.19
【解决方案3】:

你可以这样做:

double d = yourDoubleValue;  
String formattedData = String.format("%.02f", d);

【讨论】:

  • 这是不想以任何方式四舍五入数字的人的答案。
  • 我想在回合后将值存储在 double 中
【解决方案4】:

DecimalFormat 是最容易使用的选项:

double roundTwoDecimals(double d) {
        DecimalFormat twoDecimals = new DecimalFormat("#.##");
        return Double.valueOf(twoDecimals.format(d));
}

希望这能解决您的问题...

【讨论】:

  • 我现在尝试了您的解决方案......它不起作用。我放了 3,它打印出 3.0。
  • 我的错。我太快了,没有读过总是。尝试将 DecimalFormat 更改为“##.00”。这将解决您的问题!
【解决方案5】:
java.text.DecimalFormat df = new java.text.DecimalFormat("###,###.##");
df.setMaximumFractionDigits(2); 
df.setMinimumFractionDigits(2); 

【讨论】:

    【解决方案6】:

    你可以使用这样的东西

    如果你想在答案中也保留 0: 然后以字符串格式使用 (0.00)

    double d = 2.46327;
    DecimalFormat df = new DecimalFormat("0.00");
    System.out.print(df.format(d));
    

    输出:2.46

    double d = 0.0001;
    DecimalFormat df = new DecimalFormat("0.00");
    System.out.print(df.format(d));
    

    输出:0.00

    但是,如果您使用 DecimalFormat df = new DecimalFormat("0.##");

    double d = 2.46327;
    DecimalFormat df = new DecimalFormat("0.##");
    System.out.print(df.format(d));
    

    输出:2.46

    double d = 0.0001;
    DecimalFormat df = new DecimalFormat("0.##");
    System.out.print(df.format(d));
    

    输出:0

    【讨论】:

      【解决方案7】:

      我会使用类似的东西:

      System.out.printf("%.2f", theValueYouWantToPrint); 
      

      这会给你两位小数。

      【讨论】:

      • 这是最简单的解决方案!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 2014-05-03
      相关资源
      最近更新 更多