2013-10-18 62 views
3

有這樣的代碼拋出了錯誤:除零錯誤

<?php 

    $val1 = $totalsum; 
    $res = ($val1/$val2) * 100; 
    $val2 = count($allcontent); 
    $res = ($val1/$val2) * 100; 
    // 1 digit after the decimal point 
    $res = round($res, 1); // 66.7 

    echo "Success: "; 
    echo $res; 
    echo "%"; 

?> 

我曾嘗試加入這一行:

if ($res === 0) 
{ 
    echo "not eligible"; 
} 

,但它仍然提供了錯誤。有任何想法嗎?

+0

你可以縮進你的代碼! –

+0

對不起,它的方式寫在劇本上! –

回答

9

你最好要檢查$ val2中的分裂發生前:

<?php 
$val1 = $totalsum; 
$val2 = count($allcontent); 
if($val2 != 0) 
{ 
    $res = ($val1/$val2) * 100; 
    // 1 digit after the decimal point 
    $res = round($res, 1); // 66.7 
    echo "Success: ".$res."%"; 
} 
else 
{ 
    echo "Count of allcount was 0"; 
} 
?> 
1
if($val2!=0){ 
    //Do it 
}else{ 
    //Don't 
} 
-2

我猜$val2是走出0確保$allcontent被初始化並填入。

2

您的代碼如下:

$val2 = count($allcontent); 

如果$allcontent數組爲空,則$val2價值會0,你將主要做:

$res = ($val1/0) * 100; 

由於預計,這將導致PHP返回'零除'錯誤。

要確保不會發生這種情況,只需使用if聲明:

if ($val2 != 0) { 
    $res = ($val1/$val2) * 100; 
    // 1 digit after the decimal point 
    $res = round($res, 1); // 66.7 
    echo "Success: "; 
    echo $res; 
    echo "%"; 
} 

這可以被改寫使用sprintf()

if ($val2 > 0) { 
    $res = round(($val1/$val2) * 100 , 1); // 66.7 
    echo sprintf('Success: %d%%', $res); // % is used for escaping the % 
} 

它做同樣的事情,但看起來有點在我看來,更清潔。

0

確保$ VAL2不爲零試圖用它來劃分$ VAL1之前。試試這個:

<?php 
    $val1 = $totalsum; 
    $res = ($val1/$val2) * 100; 
    $val2 = count($allcontent); 

    if($val2 != 0){ 
     $res = ($val1/$val2) * 100; 
     // 1 digit after the decimal point 
     $res = round($res, 1); // 66.7 
     echo "Success: "; 
     echo $res; 
     echo "%"; 
    } 
?> 
+0

歡迎來到Stack Overflow!雖然這段代碼可能有助於解決這個問題,但它並沒有解釋_why_和/或_how_它是如何回答這個問題的。提供這種附加背景將顯着提高其長期教育價值。請[編輯]您的答案以添加解釋,包括適用的限制和假設。 –