Java 不带任何公差的浮点比较
这就是我对浮点等于运算的了解: 要真正比较浮点数是否相等,通常需要在允许的微小差异范围内进行比较;该范围通常被视为公差或ε 即Java 不带任何公差的浮点比较,java,Java,这就是我对浮点等于运算的了解: 要真正比较浮点数是否相等,通常需要在允许的微小差异范围内进行比较;该范围通常被视为公差或ε 即 这是唯一一种方法,还是有其他方法可以在没有任何公差的情况下比较精确值浮点数。使用静态Double#compare(Double d1,Double d2)方法进行内部Double表示比较如果确实需要它使用静态Double#compare(双d1,双d2)内部double表示比较的方法如果您确实需要它,=操作符比较两个double值以精确相等 例如: 1.0 == 2.0
这是唯一一种方法,还是有其他方法可以在没有任何公差的情况下比较精确值浮点数。使用静态
Double#compare(Double d1,Double d2)
方法进行内部Double
表示比较如果确实需要它使用静态Double#compare(双d1,双d2)
内部double
表示比较的方法如果您确实需要它,=
操作符比较两个double
值以精确相等
例如:
1.0 == 2.0 - 1.0 // true
0.1 + 0.2 == 0.3 // false
0.25 == 0.125 + 0.125 // true
1.0 / 3.0 == 2.0 / 6.0 // true
=
运算符比较两个double
值以获得精确相等
例如:
1.0 == 2.0 - 1.0 // true
0.1 + 0.2 == 0.3 // false
0.25 == 0.125 + 0.125 // true
1.0 / 3.0 == 2.0 / 6.0 // true
请注意,由于二进制代码的基本限制,浮点数不存在精确性。十进制不能精确地用二进制表示,而只能用二分之一、四分之一(以及分母为二次幂的其他比率)用于表示在某个可接受公差范围内“足够接近”的值。您不能删除此公差并比较精确值,因为否则无法用二进制表示小数 有用 更新:
刚刚在StAdvExcel中找到了这个,这样我就不必把它全部写出来了。读这个,也许你会考虑用BigDigMalm作为手头的任务。 < P>请注意,由于二进制代码的根本限制,浮点上没有精确性。不能精确地表示二进制中的十进制数。d二分之一、四分之一(以及分母为二次幂的其他比率)用于表示在某个可接受公差范围内“足够接近”的值。您不能删除此公差并比较精确值,因为否则您无法用二进制表示小数 有用 更新:
刚刚在StAdvExcel中找到了这一点,所以我不必把它全部写出来。读这个,也许你会考虑使用BigDeCimple进行手头的任务。
只是使用= =,或者使用一个公差(EpSelon)是错误的。如果浮点值是楠(不是数字),它们会给出意想不到的结果。。您应该改为使用floatToIntBits
建议仅使用==,或使用公差(epsilon)是错误的。如果浮点值为NaN(不是数字),它们将给出意外的结果。您应该改为使用floatToIntBits使用=
运算符…为什么要精确比较两个浮点数?是的,当然可以。您引用的建议的要点是这样做很少是一个好主意。请参阅使用=
运算符…为什么要精确比较两个浮点数g点数?是的,当然可以。你所引用的建议的要点是这样做很少是个好主意。参见