Php 为什么这里有一个零误差除法?

Php 为什么这里有一个零误差除法?,php,Php,我在这行代码中得到一个零除错误: $ratio['p{W}'] = ($ratio['{W}'] === 0) ? 0 : ($colorTotal === 0) ? 0 : ($ratio['{W}'] / $colorTotal) * 100; $ratio['p{W}'] = ($ratio['{W}'] === 0) ? 0 : (($colorTotal === 0) ? 0 : ($ratio['{W}'] / $colorTotal) * 100); 我已经用以下方法测试了上述

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

$ratio['p{W}'] = ($ratio['{W}'] === 0) ? 0 : ($colorTotal === 0) ? 0 : ($ratio['{W}'] / $colorTotal) * 100;
$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]$比率[{W}]:零
[01-Jul-2015 17:40:26 UTC]$colorTotal:零

我似乎永远都不应该在代码中达到这一点(
$ratio['{W}]/$colorTotal
),因为前面的条件在检查中是0,但它似乎达到了这一点?我怎样才能避免这个错误呢?

我将首先在你的三个字母周围加上括号,因为恐怕ElGavilan是对的。 你的一行代码读起来很难看,并且引用了我们没有的代码,这意味着我们无法测试你的代码


我喜欢燕鸥。。。但不是那样

首先,我会在你的三个字母周围加上括号,因为恐怕埃尔加维兰是对的。 你的一行代码读起来很难看,并且引用了我们没有的代码,这意味着我们无法测试你的代码


我喜欢燕鸥。。。但不是那样

首先,我会在你的三个字母周围加上括号,因为恐怕埃尔加维兰是对的。 你的一行代码读起来很难看,并且引用了我们没有的代码,这意味着我们无法测试你的代码


我喜欢燕鸥。。。但不是那样

首先,我会在你的三个字母周围加上括号,因为恐怕埃尔加维兰是对的。 你的一行代码读起来很难看,并且引用了我们没有的代码,这意味着我们无法测试你的代码


我喜欢燕鸥。。。但不是那样

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

$ratio['p{W}'] = (($ratio['{W}'] === 0) ? 0 : ($colorTotal === 0)) ? 0 : ($ratio['{W}'] / $colorTotal) * 100;
意思是
($ratio['{W}']==0)?0:($colorTotal==0)
首先评估。其结果是
0
true
,这意味着第二个三值的true部分将始终执行

在我看来,您可能希望使整个表达式正确关联:


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

$ratio['p{W}'] = (($ratio['{W}'] === 0) ? 0 : ($colorTotal === 0)) ? 0 : ($ratio['{W}'] / $colorTotal) * 100;
意思是
($ratio['{W}']==0)?0:($colorTotal==0)
首先评估。其结果是
0
true
,这意味着第二个三值的true部分将始终执行

在我看来,您可能希望使整个表达式正确关联:


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

$ratio['p{W}'] = (($ratio['{W}'] === 0) ? 0 : ($colorTotal === 0)) ? 0 : ($ratio['{W}'] / $colorTotal) * 100;
意思是
($ratio['{W}']==0)?0:($colorTotal==0)
首先评估。其结果是
0
true
,这意味着第二个三值的true部分将始终执行

在我看来,您可能希望使整个表达式正确关联:


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

$ratio['p{W}'] = (($ratio['{W}'] === 0) ? 0 : ($colorTotal === 0)) ? 0 : ($ratio['{W}'] / $colorTotal) * 100;
意思是
($ratio['{W}']==0)?0:($colorTotal==0)
首先评估。其结果是
0
true
,这意味着第二个三值的true部分将始终执行

在我看来,您可能希望使整个表达式正确关联:

($ratio['{W}']==0)
表示
$ratio['{W}']
为假,则假代码
($colorTotal==0)
在这两种情况下执行
($ratio['{W}']==0)&($colorTotal==0)
值变为0。最后一个案例0/0划分案例相同

($ratio['{W}']==0)
表示
$ratio['{W}']
为假,则假代码
($colorTotal==0)
在这两种情况下执行
($ratio['{W}']==0)&($colorTotal==0)
值变为0。最后一个案例0/0划分案例相同

($ratio['{W}']==0)
表示
$ratio['{W}']
为假,则假代码
($colorTotal==0)
在这两种情况下执行
($ratio['{W}']==0)&($colorTotal==0)
值变为0。最后一个案例0/0划分案例相同



($ratio['{W}']==0)
表示
$ratio['{W}']
为假,则假代码
($colorTotal==0)
在这两种情况下执行
($ratio['{W}']==0)&($colorTotal==0)
值变为0。上一个案例0/0也一样。

为什么我被否决了?这个问题是关于什么的?什么是
parent::p
?三元运算符parent::p只是回声text@AsifMushtaq:当然,我可以做一个if-else。我在试着理解为什么在上面的代码行中我会被零除掉。为什么我会被否决?这个问题是关于什么的?什么是
parent::p
?三元运算符parent::p只是回声text@AsifMushtaq:当然,我可以做一个if-else。我在试着理解为什么在上面的代码行中我会被零除掉。为什么我会被否决?这个问题是关于什么的?什么是
parent::p
?三元运算符parent::p只是回声text@AsifMushtaq:当然,我可以做一个if-else。我在试着理解为什么在上面的代码行中我会被零除掉。为什么我会被否决?这个问题是关于什么的?什么是
parent::p
?三元运算符parent::p只是回声text@AsifMushtaq:当然,我可以做一个if-else。我试图理解为什么在上面的代码行中我得到了一个被零除的除法。parent::p只是echo,我把它改成了echo,这样很容易理解。另外一个是我喜欢的ternaries。。。但不是那样。。你是对的,三元运算符应该用来提高代码的可读性,而不是降低代码的可读性。parent::p只是echo,我把它改为echo,这样很容易理解。另外一个是我喜欢的三元运算符。。。但不是那样。。你是对的,三元运算符应该用来提高代码的可读性,而不是降低代码的可读性。parent::p只是echo,我把它改为echo,这样很容易理解。另外一个是我喜欢的三元运算符。。。但不是那样。。您是对的,应该使用三元运算符使代码更可读,而不是使