-2

对于此代码:

double foo = 100.0;
...
// foo may or may not change value here
...
if (foo == 100) {  // will this ever be true?
    ....
}

if 块会被调用吗?如果不是,检查是否的正确方法是foo == 100.0什么?

4

2 回答 2

2

试试看吧,小伙伴...

public class Test
{
   public static void main(String[] args)
   {
      double foo = 100.0;

      if (foo == 100) 
      {
         System.out.println("true");
      }
   }
}

输出:

true
于 2013-07-30T00:24:53.420 回答
1

是的,可以调用。测试可以true。如果foo不理会(或重新分配给100.0),则比较将成功。

但它只会成功,因为100.0它具有作为 a 的精确表示double,并且该int100100.0 double通过扩大的原始转换转换为相同的值。

==您对使用比较值保持警惕是正确的double,因为某些double值是精确文字的不精确表示(例如,不精确地表示0.1为 a double)。

比较double值的最佳方法是确保这些值在彼此的某个(低)容差值内,就像 JUnit 所做的那样:

assertEquals(双倍预期,双倍实际,双倍增量)

这可确保expectedactual值在公差值范围内delta

于 2013-07-30T00:24:35.220 回答