2017-07-13 23 views
0

PHPWy PHP在浮點運算上比Javascript好?

<?php echo (-9.341+2.111); 

結果-7.23

的Javascript

console.log(2.111-9.341) 

結果-7.229999999999999

我知道浮算術的,但爲什麼香草PHP給出確切的答案和Javascript(在Google Chrome控制檯上測試過)不是?

+0

你會發現很多地方PHP也給你重複的數字。 – ceejayoz

+0

http://stackoverflow.com/questions/588004/is-floating-point-math-broken – rtfm

+0

這兩個[JavaScript](https://www.ecma-international.org/ecma-262/5.1/#sec-4.3 .19)和[PHP](http://php.net/manual/en/language.types.float.php)使用IEEE 754,echo可能是舍入(注意PHP浮點是32b還是64b是平臺相關的) –

回答

1

這是PHP的echo被四捨五入:

var_dump(sprintf('%.20f', -9.341+2.111)); // string(23) "-7.22999999999999864997" 

php sources它看起來是echo將使用以下轉換將一個浮點數轉換爲字符串:

str = zend_strpprintf(0, "%.*G", (int) EG(precision), dval); 

這基本上意味着要麼科學計數法或%f(參見precision配置指令,默認爲14)。

+0

因此默認情況下回顯爲回顯?但爲什麼如果我做var_dump(sprintf('%f',-9.341 + 2.111))我得到了「-7.230000」。什麼告訴PHP在小數點後第二位? –

+0

「我得到了'-7.230000'」。 ---你期望得到什麼? – zerkms

+0

確定如此sprintf默認情況下舍入到6位小數,並回顯到15有意義的數字主題權利? –