我在这行代码中得到零错误除法:
$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但似乎达到了它?如何防止此错误?
答案 0 :(得分:3)
三元运算符在PHP中是左关联的。您的代码相当于:
$ratio['p{W}'] = (($ratio['{W}'] === 0) ? 0 : ($colorTotal === 0)) ? 0 : ($ratio['{W}'] / $colorTotal) * 100;
意思是($ratio['{W}'] === 0) ? 0 : ($colorTotal === 0)
首先评估。结果是0
或true
,这意味着第二个三元组的真实部分将始终执行。
在我看来,你可能想让整个表达成为正确联想:
$ratio['p{W}'] = ($ratio['{W}'] === 0) ? 0 : (($colorTotal === 0) ? 0 : ($ratio['{W}'] / $colorTotal) * 100);
答案 1 :(得分:0)
我开始在你的三元组周围添加括号,因为我担心ElGavilan是对的。 您的单行内容非常难看,并且指的是我们没有的代码,这意味着我们无法测试您的代码。
我喜欢三元组......但不是那样!
答案 2 :(得分:0)
$ratio['p{W}'] = ($ratio['{W}'] === 0) ? 0 : ($colorTotal === 0) ? 0 : ($ratio['{W}'] / $colorTotal) * 100;
($ratio['{W}'] === 0)
表示$ratio['{W}']
为假,然后在两种情况下执行错误代码($colorTotal === 0)
($ratio['{W}'] === 0) & ($colorTotal === 0)
值变为0.对于最后一个案例分割案例0/0。 / p>