我尝试了一个简单的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 :(得分: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)。