5

我有这段代码抛出错误:

<?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"; 
}

但它仍然给出错误。有任何想法吗?

4

5 回答 5

14

您想在除法发生之前检查 $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";
}
?>
于 2013-10-18T18:34:04.727 回答
2

您的代码中有以下内容:

$val2 = count($allcontent);

如果$allcontent数组为空,则 的值为,您实际上将执行以下操作$val20

$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 %
}

在我看来,它做同样的事情,但看起来更干净一些。

于 2013-10-18T18:31:34.843 回答
1
if($val2!=0){
  //Do it
}else{
  //Don't
}
于 2013-10-18T18:30:24.420 回答
0

Make sure $val2 is NOT zero before trying to divide $val1 with it. Try this:

<?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 "%";
    }
?>
于 2016-10-04T13:13:41.873 回答
-2

我猜$val2是 0。确保$allcontent正在初始化和填充。

于 2013-10-18T18:30:53.887 回答