2015-09-26 29 views
1

我有这样一个 问题,当我EVAL这PHP的 - 如何评估与大整数结果的数学?

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

我得到这个结果-2.1901884886788E +而不是16 -21901884886788304

我知道bcmath时,但如何计算一样多操作这个?

注: 我的问题是有关打印出来作为BIG INT

+0

我认为这可能有帮助http://php.net/manual/en/book.bc.php –

+0

这是多种操作,我不知道哪个会先出现 –

回答

0

检查,如果你使用的是32位或64位的PHP

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

32位不会处理这个整数,64位结果是-21901884886788304

如果您必须使用32位,请尝试使用GMP,并自己解析整数(祝你好运...)

另一种解决方案是编写非常基本的Python程序(或任何其他语言轻松处理大数字)并将其作为参数发送给exec函数,并让其他语言来解析它为你(Python可以很容易地处理非常大的数字)

+0

我使用的是ubuntu 64bit,而echo PHP_INT_SIZE;我得到了8 –

0

我假设行“如何计算多个这样的操作?”意思是“如何为任意用户提交的数学表达式编写计算器?”,这就是为什么您首先使用eval的原因。

如果您使用eval而非用户提交的输入,则失败,请记住这是一条经验法则。

无论如何,你只是不能解决这个问题,如果你想使用bignums,你必须使用BCMath操作。

正确的解决方案是标记输入并构建数学运算树,本质上是为描述数学表达式编写简单语言的解释器。

这是5秒钟的谷歌搜索的结果:https://github.com/michellesanver/Calculator你可以把她的工作,并用BCMath方法取代Addition类的普通数学运算符的使用。