什么是比较两个浮点数值以获得精确相等的优雅,可读和非冗长的方法?检查两个浮点数/双精度值是否相等
听起来很简单,它是一个邪恶的问题。该==
运营商没有得到楠完成工作,并且还具有零特殊处理:
(+0.0 == -0.0) -> true
Double.NaN == Double.NaN -> false
但我想,以确定是否两个值是完全一样的(但我不照顾针对不同的NaN模式,所以任何NaN ==任何其他NaN - > true)。
我可以这个丑八怪一段代码做到这一点:
Double.doubleToLongBits(a) == Double.doubleToLongBits(b)
有没有更好的方式来写这个(并意图明显)?
你不一天为什么你想这样做。如果他们真的是浮点数,你的答案将不会有意义。 – Julian 2013-03-22 18:18:35
@ Julian参见PeterLawrey的答案就是一个非常有意义的例子。然而,我的应用程序是一个对象的equals()方法,其中float是主键的一部分(不是我自己选择的)。浮点通常无法直观的假设,所以我很小心地覆盖边缘案例。 – Durandal 2013-03-25 10:53:16
对不起,你不能做得更好,你的“丑陋的怪物片”已经是完美的了...... – 2013-03-25 11:36:16