Деление на ноль ошибок

У меня есть этот код выдает ошибку:

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

но все равно выдает ошибку. есть идеи?

5 ответов

Решение

Вы хотите проверить $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";
}
?>

В вашем коде есть следующее:

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

Он делает то же самое, но, на мой взгляд, выглядит немного чище.

if($val2!=0){
  //Do it
}else{
  //Don't
}

Убедитесь, что $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 "%";
    }
?>

Я догадываюсь $val2 выходит на 0. Убедитесь, что $allcontent инициализируется и заполняется.

Другие вопросы по тегам