У меня такая проблема
когда я это оценил
$a='820725059 + 35 * 4082615 + 6209777 - 6476390779 * 3376849 + 3 - 8089 * 3967379273 - 0 * 55111452';
eval('return ('.$a.');');
я получил этот результат -2.1901884886788E + 16
вместо -21901884886788304
я знаю о BCMath, но как рассчитать несколько операций, как это?
Замечания:
Моя проблема о распечатке как большой INT
Проверьте, используете ли вы 32-битный или 64-битный PHP
echo PHP_INT_SIZE; //4 is 32bit, 8 is 64bit
32bit не будет обрабатывать это целое число, для 64bit результат -21901884886788304
если вам нужно использовать 32-битный, попробуйте использовать GMP, и разобрать целое число самостоятельно (удачи …)
Другое решение — написать очень простую программу на Python (или любой другой язык, который легко обрабатывает большие числа) и отправить ее в качестве аргумента с Exec функция и позволить другому языку проанализировать его для вас (Python может легко обрабатывать очень большие числа)
Я предполагаю, что строка «как рассчитать несколько операций, как это?» означает «как написать калькулятор для произвольных представленных пользователем математических выражений?», поэтому вы используете eval
На первом месте.
Если вы используете eval
Если вы пропустили несанкционированный ввод данных пользователем, вы потерпите неудачу, запомните это как правило.
Вы просто не можете решить это с eval
в любом случае, вы должны использовать операции BCMath, если хотите работать с bignums.
Правильное решение состоит в том, чтобы токенизировать ввод и построить дерево математических операций, по сути, написать интерпретатор для простого языка для описания математических выражений.
Вот результат 5 секунд поиска в Google для того, что уже было сделано ранее: https://github.com/michellesanver/Calculator Вы можете взять ее работу и заменить использование простых математических операторов в таких классах, как Addition
с методами BCMath.