【发布时间】:2015-06-16 06:20:47
【问题描述】:
我想检查一个double 是小于、等于还是大于另一个double。尽管我读了很多关于floats 和doubles 的内容由于计算机如何在二进制级别上计算而无法精确比较,但到目前为止,使用简单的二进制运算符就像一个魅力。我用几十个不同的数字对其进行了测试,到目前为止,它甚至没有让我失望过一次。
那么就我而言,像这样比较它们真的有问题吗?如果有 - 为什么我找不到它以及如何修复它?
编辑:如果我决定比较它们,我知道0.1 + 0.2 != 0.3。问题是 - 我想简单地比较两个 fixed doubles。我不必比较0.1 + 0.2 和0.3。我最多只能比较0.3 和0.3。或0.4 和0.3。类似的东西。我真的需要使用 BigDecimal、epsilon 或其他什么吗?
【问题讨论】:
-
如果和
=比较肯定会遇到问题。==的情况较少,但仍然存在问题。另外,查看stackoverflow.com/q/588004/1288 的具体示例。 -
@BiltheLizard 我已经看到了。问题是..我只是有两个固定的(!)双数..我没有做任何操作,而是对它们进行比较。这就是我的问题的来源!也编辑了我的 OP!
-
double真正相等的也将真正比较相等(NaN除外)。 -
==运算符确实比较双精度值是否相等。如果您分配x=0.3,那么x == 0.3将是true。以下所有否定答案都正确地警告您,程序员经常将错误引入代码中,将double视为一种真实,并错误地期望特定结果来自某些特定情况下的一些计算。 (例如,如果你认为for(x=0.0;x!=0.3;x+=0.1)会终止,请再想一想!)明智地 使用==,并使用单元测试和asserts向其他程序员证明你知道你在做什么。
标签: java numbers compare theory point