2015-09-26 76 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類的普通數學運算符的使用。