为什么我在这里通过零错误得到一个分区?

在这行代码中,我得到了一个零错误的除法:

$ratio['p{W}'] = ($ratio['{W}'] === 0) ? 0 : ($colorTotal === 0) ? 0 : ($ratio['{W}'] / $colorTotal) * 100;

我已经用上面的测试过了:

echo '$ratio[{W}]:'.$ratio['{W}'].', $colorTotal:'.$colorTotal;

if($ratio['{W}'] === 0) {
    echo('$ratio[{W}]: zero');
}
else {
    echo('$ratio[{W}]: not zero');
}

if($colorTotal === 0) {
    echo('$colorTotal: zero');
}
else {
    echo('$colorTotal: not zero');
}

结果是:

[01-Jul-2015 17:40:26 UTC] $ratio[{W}]:0, $colorTotal:0

[01-Jul-2015 17:40:26 UTC] $ratio[{W}]: zero

[01-Jul-2015 17:40:26 UTC] $colorTotal: zero

看起来我不应该在代码中达到这一点( $ratio['{W}'] / $colorTotal ),因为前面的标准在检查中是0,但它似乎达到了它? 我怎样才能防止这个错误?


三元运算符在PHP中是左关联的。 您的代码相当于:

$ratio['p{W}'] = (($ratio['{W}'] === 0) ? 0 : ($colorTotal === 0)) ? 0 : ($ratio['{W}'] / $colorTotal) * 100;

意思是($ratio['{W}'] === 0) ? 0 : ($colorTotal === 0) ($ratio['{W}'] === 0) ? 0 : ($colorTotal === 0)首先评估。 这个结果是0或者是true ,这意味着第二个三元组的真正部分将始终执行。

它看起来像你可能想让整个表达式正确联想:

$ratio['p{W}'] = ($ratio['{W}'] === 0) ? 0 : (($colorTotal === 0) ? 0 : ($ratio['{W}'] / $colorTotal) * 100);

我会开始在你的三元组中加入括号,因为我担心ElGavilan是对的。 你的单行代码很难读,而且是指我们没有的代码,这意味着我们无法测试你的代码。

我喜欢三元组......但不是那样!


$ratio['p{W}'] = ($ratio['{W}'] === 0) ? 0 : ($colorTotal === 0) ? 0 : ($ratio['{W}'] / $colorTotal) * 100;

($ratio['{W}'] === 0)表示$ratio['{W}']为false,则在这两种情况下执行错误代码($colorTotal === 0) ($ratio['{W}'] === 0) & ($colorTotal === 0)值变为0.对于最后一种情况分割情况0/0也是如此。

链接地址: http://www.djcxy.com/p/69367.html

上一篇: Why am I getting a division by zero error here?

下一篇: How can i fix Warning: Division by zero in OpenCart