Itangalo/evalmath.class.php

How to avoid division by zero problem

Opened this issue · 3 comments

//function 1/x return 0 for x=0 !!! How to avoid this
replace line number 315
// if ($op2 == 0) return $this->trigger("division by zero");
//by this
if($op2 == 0){$stack->push(NAN); break;}

Предложенный код скрывает факт ошибки:
if($op2 == 0){$stack->push(NAN); break;}

Класс EvalMath генерирует ошибки уровня E_USER_WARNING.
Самый простой способ загасить ошибку, это поставить знак "@" перед выражением:

        $em = new EvalMath();

        $v = @$em->evaluate('1/2');
        if($v === false) {
            var_dump($em->last_error); // not shown
        }
        var_dump($v); // float 0.5

        $v = @$em->evaluate('1/0');
        if($v === false) {
            var_dump($em->last_error); // string 'division by zero' (length=16)
        }
        var_dump($v); // boolean false

У меня нет доступа к твоему localhost.

К стати можно просто отключить ошибки:
$m->suppress_errors - Подавление ошибок. Установите true для отключения предупреждений при вычислении выражений.

См. исходный код: https://github.com/optimistex/yii2-expression/blob/master/evalmath.class.php#L415