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