Java 浮点值四舍五入

Java Float value round off

我尝试了一个简单的 java 程序来四舍五入 Float 值

float value = 0.525f;
System.out.println(Math.round(value * 100.0d) / 100.0f)

获取输出是 - 0.52 但预期是 - 0.53

当我调试 float value 变量的值时,它向我显示 0.5249999761581421 之类的东西。我认为仅因为这个原因,它没有正确舍入。

如果有人知道如何将浮点值四舍五入到小数点后两位,请帮助我。

0.525f 转换为 double 时(这在您的计算中隐式发生),0.5249999761581421 最近的双精度表示 。然后这个数字会向下舍入。

另一个问题是您的表达式总是向下舍入(因为您只是截掉了​​除前两位小数以外的所有内容)。

Java built-in 支持 BigDecimal class.
中的舍入数字 要舍入这样的数字,请使用:

String s = String.valueOf(0.525f); // results in "0.525"
BigDecimal rounded = new BigDecimal(s).setScale(2, RoundingMode.HALF_UP);
System.out.println(rounded);

结果是 0.53.

另请注意,舍入数字的方式不同(请参阅 Javadoc RoundingMode)。