Java,Round double to two decimal(round to 0.05)

时间:2015-03-16 17:08:41

标签: java rounding

我想在java中使用double。我希望它像这样四舍五入:

  • 24.04应该给出24.05
  • 24.07应该给出24.05
  • 24.02 = 24.00
  • 24.08 = 24.10

我尝试使用这样的圆形:

    amount = amount *10;
    amount = Math.round(amount)/10;

但是,就像你看到的那样,它不起作用。

感谢您的回答!

3 个答案:

答案 0 :(得分:2)

Math.round(amount * 20) / 20f是单向的。

答案 1 :(得分:0)

请注意,使用float进行舍入会因float的内部二进制表示而产生错误(对于double来说也是如此)。 因此,对于金额为23.01的Math.round(amount * 20) / 20f这样的操作可以得到结果23.000000003(这是一个我没有检查过的例子,但是使用少量测试很容易找到问题)。

使用BigDecimal代替。

答案 2 :(得分:0)

我会这样做:

    double[] amounts = new double[]{24.04, 24.07, 24.02, 24.08};
    for(double d : amounts){
        double d2 = Math.round(d * 20) / 20.0;
        System.out.println(String.format("%.2f -> %.2f",d,d2));
    }

结果如下:

24,04 -> 24,05
24,07 -> 24,05
24,02 -> 24,00
24,08 -> 24,10

[编辑] 正如其他人所说,可能存在一些精确错误。如果按照我的示例中的建议打印它,它很可能永远不可见。但这取决于你需要什么数字....