对于此代码:
double foo = 100.0;
...
// foo may or may not change value here
...
if (foo == 100) { // will this ever be true?
....
}
if 块会被调用吗?如果不是,检查是否的正确方法是foo == 100.0
什么?
对于此代码:
double foo = 100.0;
...
// foo may or may not change value here
...
if (foo == 100) { // will this ever be true?
....
}
if 块会被调用吗?如果不是,检查是否的正确方法是foo == 100.0
什么?
试试看吧,小伙伴...
public class Test
{
public static void main(String[] args)
{
double foo = 100.0;
if (foo == 100)
{
System.out.println("true");
}
}
}
输出:
true
是的,可以调用。测试可以true
。如果foo
不理会(或重新分配给100.0
),则比较将成功。
但它只会成功,因为100.0
它具有作为 a 的精确表示double
,并且该int
值100
将100.0
double
通过扩大的原始转换转换为相同的值。
==
您对使用比较值保持警惕是正确的double
,因为某些double
值是精确文字的不精确表示(例如,不精确地表示0.1
为 a double
)。
比较double
值的最佳方法是确保这些值在彼此的某个(低)容差值内,就像 JUnit 所做的那样:
assertEquals(双倍预期,双倍实际,双倍增量)
这可确保expected
和actual
值在公差值范围内delta
。