我正在使用浮点常量并将对象私有浮点变量设置为下面的浮点常量,但是当对象输出它设置的值时,它会四舍五入浮点中的最后一位数字。
private final float RF_FREQUENCY = 956.35625f;
Object o = new Object();
o.setRFFrequency(RF_FREQUENCY);
System.out.println(o.getRFFrequency);
输出:956.35626
对象中的变量声明为protected float rfFrequency;
下面是 getter 和 setter。
public float getRFFrequency() {
return rfFrequency;
}
public void setRFFrequency(float value) {
this.rfFrequency = value;
}
知道为什么会发生这种情况吗?
因为单精度 IEEE754 浮点数只有 23 位精度(24 位,包括开头隐含的 1 位)。
这大约相当于小数点后七位,你可以看到yournumber 有八位数字。
所发生的一切是计算机正在选择它可以表示的最接近您所要求的数字。
如果需要更高的精度,请使用双精度数。这给你 52/53 位,相当于大约 15 位十进制数字。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)