在 Java 中使用 == 来比较浮点数有什么问题?

2022-08-31 06:31:48

根据这个java.sun页面是Java中浮点数的相等比较运算符。==

但是,当我键入此代码时:

if(sectionID == currentSectionID)

进入我的编辑器并运行静态分析,我得到:“JAVA0078浮点值与==相比”

用于比较浮点值有什么问题?正确的方法是什么?==


答案 1

测试浮点数“相等”的正确方法是:

if(Math.abs(sectionID - currentSectionID) < epsilon)

其中 epsilon 是一个非常小的数字,如 0.00000001,具体取决于所需的精度。


答案 2

浮点值可能会偏离一点点,因此它们可能不会报告为完全相等。例如,将浮点数设置为“6.1”,然后再次将其打印出来,您可能会得到类似于“6.099999904632568359375”的报告值。这是浮动工作方式的基础;因此,您不想使用相等来比较它们,而是在一个范围内进行比较,也就是说,如果浮点数与要比较的数字的差异小于某个绝对值。

关于登记册的这一条很好地概述了为什么会这样;有用和有趣的阅读。