Java 浮点意外圆角化

标签 java floating-point floating-accuracy

我正在使用浮点常量并将对象私有(private)浮点变量设置为下面的浮点常量,但是当对象输出其设置的值时,它会将浮点中的最后一位数字向上舍入。

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 float 只有 23 位精度(24 位,包括开头隐含的 1 位)。

这大约相当于七位十进制数字,您可以看到您的号码中有八位数字。

所发生的一切是计算机正在选择它可以表示的最接近您所要求的数字。

如果需要更高的精度,请使用 double 。这为您提供了 52/53 位,相当于大约 15 位十进制数字。

关于Java 浮点意外圆角化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9329710/

相关文章:

java - RMI 只是一种基础技术或仍然值得使用

python - 将值格式化为具有宽度和精度的 float

python - 浮点取模问题

java - 如何在 JOptionPane 中设置默认输入字段

java - 为什么 Java 源代码彼此之间有这么多文件夹?

java - java float 可以按字节表示排序吗?

objective-c - 在 C 和 Objective C 中,我们是否应该几乎永远不要仅使用 (int) 将 float 或 double 值转换为整数?

math - float 学有问题吗?

java - 访问API基本路径时如何重定向到API索引页面?

小数点后没有任何零的 Ruby float