0

将双精度数舍入到小数点后两位时遇到问题。我知道很多地方都问过这个问题。但我的问题略有不同,我在其他地方找不到。

据我所知,有两种方法可以做到这一点。

  1. Math.round(double*100.0)/100.0
  2. DecimalFormat(“###.##”)

我正在尝试使用第一种方式:一种自定义方式来四舍五入。当第二个小数为 0 时,结果将只打印第一个小数而忽略第二个。

例如,

  1. Math.round(1.23333*100.0)/100.0结果是 1.23。这很好用。
  2. Math.round(3.90*100.0)/100.0.结果是 3.9。出现问题。我想显示 3.90 而不是 3.9
  3. Math.round(3*100.0)/100.0. 结果是 4.0。我想要 4.00 而不是 4.0

所以,我的问题是,无论最后一个小数是否为 0,我如何才能获得带有 2 个小数的双精度值。我知道我可以使用第二种方式DecimalFormat(“###.##”)——实现我想要的!但是使用第一种方法可以做到吗?

编辑:感谢您的回答。看起来不可能使用 round() 方法来实现它。但是,有些人建议使用两种方式的组合来实现它。但我认为只有使用DecimalFormat(“###.##”)才能得到我想要的。任何人都可以确认吗?

4

4 回答 4

1

我建议使用 String.format("%1$.2f",x)。它将值四舍五入到指定的精度(在我们的示例中为 2 位),并在右侧留下尾随零。

System.out.println(String.format("%1$.2f",3.121)) gives 3.12
System.out.println(String.format("%1$.2f",3.129)) gives 3.13
System.out.println(String.format("%1$.2f",3.12))  gives 3.12
System.out.println(String.format("%1$.2f",3.10))  gives 3.10
于 2013-05-02T08:24:16.217 回答
0

您是否尝试过以下操作?

DecimalFormat(“###.00”)

如果没有记错,使用#-符号时尾随零留空。

于 2013-05-02T07:57:19.003 回答
0

我相信您需要结合使用两者来满足您的需求。四舍五入以获得带有两位小数的数字,并DecimalFormat以两位小数显示。

于 2013-05-02T07:58:25.820 回答
0

你应该格式化你的结果DecimalFormat

DecimalFormat format = new DecimalFormat("0.00");
System.out.println(Math.round(3.90*100.0)/100.0); // 3.9
System.out.println(format.format(Math.round(3.90*100.0)/100.0)); // after using format 3.90
System.out.println(format.format(Math.round(3*100.0)/100.0));

输出是

3.9
3.90
3.00
于 2013-05-02T08:00:31.377 回答