有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java将双精度四舍五入将截断零

我有以下逻辑,将双精度值舍入到小数点后2位:

public double round(double value, int places) {
        BigDecimal bd = new BigDecimal(value);
        bd = bd.setScale(places, RoundingMode.HALF_UP);
        return bd.doubleValue();    
}

它适用于大多数情况,但在某些情况下无法将结果四舍五入到小数点后2位,下面是一个例子

如果我使用代码round(12.503, 2)调用这个方法,我需要结果为12.50,因为我需要结果的小数点后两位,但我得到的输出为12.5

请帮我解决这个案子


共 (1) 个答案

  1. # 1 楼答案

    Java中的double表示一个数学数字,其中12.50与12.5是相同的数字。显示一个数字的位数是将其转换为字符串的问题,而不是数字本身的问题

    因此,最好在将数字转换为字符串进行输出时进行舍入,例如:

    System.out.printf("%5.2f", value);