Java,四舍五入到小数点后两位(四舍五入到 0.05)

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

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

我尝试像这样使用圆形:

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

但是,如您所见,这是行不通的。

感谢您的回答!

Math.round(amount * 20) / 20f 是一种方法。

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

改用BigDecimal

我会这样做:

    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

[编辑] 正如其他人所建议的那样,可能存在一些精度错误。如果您按照我的示例中的建议打印它,它很可能永远不会可见。但这取决于你需要这个号码做什么....