@uralmas

Как обойти проблему деления на 0 при выполнении произвольной арифметической функции?

Можете подсказать, если ли математическая библиотека выполнения произвольной арифметической функции с учётом деления на 0. Например, есть у меня строка, которая путём некоторого преобразования превращается в арифметическое выражение
"1 + 2 / 0"
Выполнение с помощью функции eval() данного выражения даст ошибку "Division by zero". Но мне нужно, чтобы такие участки "2 / 0" определялись и давали значение 0.
Это важно, т.к. у меня есть несколько сотен таких строк, которые генерируются на лету. Ручной разбор таких строк для ручного перехвата таких мест я не смог написать - очень сложно.
Почему это так происходит: В системе руками создаются различные правила вычисления некоторых параметров, например, "1 - $a / $b", где переменные $a и $b подставляются из текущих данных, вносимых извне. Причём эти значения могут быть любыми, в том числе и нулём. И 0 - это нормальное валидное значение
Более подробный пример:
($a + $b / $c) / $d + $e * $f
Значения в переменные подставляются любые - от 0 до бесконечности (почти). В этом случае, если значения $c и/или $d равны 0, вся функция выдаст NAN (php 7.1), а мне надо чтобы оно заменяла проблемные участки кода и выдало результат выражения
0 + $e * $f
Есть ли библиотеки, которые могут обойти корректно эту ошибку? Пробовал следующие библиотеки:
  • rodriados/mathr
  • mossadal/math-parser
  • fintara/calculator-php

Все они не подходят
  • Вопрос задан
  • 347 просмотров
Пригласить эксперта
Ответы на вопрос 2
А как насчет перехвата исключения и в блоке catch определять тип "Division by zero" и возвращать 0.
Ответ написан
@BorisKorobkov Куратор тега PHP
Web developer
с помощью функции eval()

Говнокод. Забудьте про эту функцию.

например, "1 - $a / $b",

if ($b != 0) ...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Smart Медицина Москва
от 150 000 ₽
Spice IT Recruitment Москва
До 230 000 ₽
Playkot Санкт-Петербург
от 150 000 до 200 000 ₽
10 июл. 2020, в 00:25
80000 руб./за проект
09 июл. 2020, в 23:02
3000 руб./за проект