簡體   English   中英

為什么我在這里得到除以零的錯誤?

[英]Why am I getting a division by zero error here?

我在這行代碼中得到零除錯誤:

$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)首先求值。 其結果為0true ,這意味着將始終執行第二個三進制數的真實部分。

在我看來,您可能想使整個表達式正確關聯:

$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}']為假,然后在兩種情況下都執行錯誤代碼($colorTotal === 0) ($ratio['{W}'] === 0) & ($colorTotal === 0)值變為0。與最后一個案例除法案例0/0相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM