首页 > 解决方案 > Java 浮点值四舍五入

问题描述

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

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

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

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

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

标签: java-8floating-accuracy

解决方案


转换0.525f为 a double(在您的计算中隐含地发生)时,0.5249999761581421最接近的 double 表示。然后这个数字将被四舍五入。

另一个问题是你的表达式总是四舍五入(因为你只是去掉了除前两位小数之外的所有位)。

Java 内置了对BigDecimal类中舍入数字的支持。
要对这样的数字进行四舍五入,请使用:

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)。


推荐阅读