Деление на ноль ошибок
У меня есть этот код выдает ошибку:
<?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 %
}
Он делает то же самое, но, на мой взгляд, выглядит немного чище.
Убедитесь, что $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
инициализируется и заполняется.