Как оценить математику с большим целочисленным результатом?

У меня такая проблема
когда я это оценил

$a='820725059 + 35 * 4082615 + 6209777 - 6476390779 * 3376849 + 3 - 8089 * 3967379273 - 0 * 55111452';
eval('return ('.$a.');');

я получил этот результат -2.1901884886788E + 16
вместо -21901884886788304

я знаю о BCMath, но как рассчитать несколько операций, как это?

Замечания:
Моя проблема о распечатке как большой INT

1

Решение

Проверьте, используете ли вы 32-битный или 64-битный PHP

echo PHP_INT_SIZE; //4 is 32bit, 8 is 64bit

32bit не будет обрабатывать это целое число, для 64bit результат -21901884886788304

если вам нужно использовать 32-битный, попробуйте использовать GMP, и разобрать целое число самостоятельно (удачи …)

Другое решение — написать очень простую программу на Python (или любой другой язык, который легко обрабатывает большие числа) и отправить ее в качестве аргумента с Exec функция и позволить другому языку проанализировать его для вас (Python может легко обрабатывать очень большие числа)

0

Другие решения

Я предполагаю, что строка «как рассчитать несколько операций, как это?» означает «как написать калькулятор для произвольных представленных пользователем математических выражений?», поэтому вы используете eval На первом месте.

Если вы используете eval Если вы пропустили несанкционированный ввод данных пользователем, вы потерпите неудачу, запомните это как правило.

Вы просто не можете решить это с eval в любом случае, вы должны использовать операции BCMath, если хотите работать с bignums.

Правильное решение состоит в том, чтобы токенизировать ввод и построить дерево математических операций, по сути, написать интерпретатор для простого языка для описания математических выражений.

Вот результат 5 секунд поиска в Google для того, что уже было сделано ранее: https://github.com/michellesanver/Calculator Вы можете взять ее работу и заменить использование простых математических операторов в таких классах, как Addition с методами BCMath.

0

По вопросам рекламы [email protected]