这段代码:
$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类型,因此没有任何字符串可以插入。
我一定错过了什么。
我很抱歉没有提供真正可重现的代码,但在这种情况下我不知道如何。
答案 0 :(得分:0)
如果你这样做,他们应该是一样的。但请注意,浮点值的特征是计算哪个 似乎导致相同的值不需要实际相同。 因此,如果
$a
是文字.17
,$b
通过计算到达那里 很可能它们是不同的,尽管两者都显示相同 值。通常你永远不会比较浮点值的相等性 这个,你需要使用一个可接受的最小差异:
if (abs(($a-$b)/$b) < 0.00001) { echo "same"; }
类似的东西。
我认为其他人有同样的问题。