尽管键入正确,PHP值比较错误

时间:2018-03-30 09:26:31

标签: php casting comparison variable-types

这段代码:

$total=$o->cart->getTotalSum();
$subTotal=$o->cart->getSubTotal();

if(floatval($r['sum_total']) != floatval($total) ||
   floatval($r['sum_sub']) != floatval($subTotal)) {
      echo 'Differs on #' . $r['id'];
      echo 'Total: ' . $total . ' / ' . $r['sum_total'];
      echo 'Sub: ' . $subTotal . ' / ' . $r['sum_sub'];
   }

给我这个输出:

Differs on #697
Total: 19.6 / 19.6
Sub: 19.6 / 19.6

为什么呢?怎么可能呢?

我确保所有比较的值都是float类型,因此没有任何字符串可以插入。

我一定错过了什么。

我很抱歉没有提供真正可重现的代码,但在这种情况下我不知道如何。

1 个答案:

答案 0 :(得分:0)

  

如果你这样做,他们应该是一样的。但请注意,浮点值的特征是计算哪个   似乎导致相同的值不需要实际相同。   因此,如果$a是文字.17$b通过计算到达那里   很可能它们是不同的,尽管两者都显示相同   值。

     

通常你永远不会比较浮点值的相等性   这个,你需要使用一个可接受的最小差异:

     

if (abs(($a-$b)/$b) < 0.00001) { echo "same"; }类似的东西。

我认为其他人有同样的问题。

https://stackoverflow.com/a/3148991/2725502