Java Float值四舍五入

时间:2019-07-18 15:49:57

标签: java-8 floating-accuracy

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

0.525f转换为double(在计算中隐式发生)时,0.5249999761581421最近的双重表示形式。然后,此数字将四舍五入。

另一个问题是,您的表达式总是四舍五入(因为您只切除了除小数点后两位之外的所有数字)。

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