<?php echo (-9.341+2.111);
結果-7.23
的Javascript
console.log(2.111-9.341)
結果-7.229999999999999
我知道浮算術的,但爲什麼香草PHP給出確切的答案和Javascript(在Google Chrome控制檯上測試過)不是?
<?php echo (-9.341+2.111);
結果-7.23
的Javascript
console.log(2.111-9.341)
結果-7.229999999999999
我知道浮算術的,但爲什麼香草PHP給出確切的答案和Javascript(在Google Chrome控制檯上測試過)不是?
這是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)。
因此默認情況下回顯爲回顯?但爲什麼如果我做var_dump(sprintf('%f',-9.341 + 2.111))我得到了「-7.230000」。什麼告訴PHP在小數點後第二位? –
「我得到了'-7.230000'」。 ---你期望得到什麼? – zerkms
確定如此sprintf默認情況下舍入到6位小數,並回顯到15有意義的數字主題權利? –
你會發現很多地方PHP也給你重複的數字。 – ceejayoz
http://stackoverflow.com/questions/588004/is-floating-point-math-broken – rtfm
這兩個[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是平臺相關的) –