Wy PHP在浮点运算方面优于Javascript?

Wy PHP在浮点运算方面优于Javascript?,javascript,php,precision,numeric,Javascript,Php,Precision,Numeric,PHP 结果-7.22999999999 我知道浮点运算,但为什么vanilla PHP给出准确答案,而在Google Chrome控制台上测试的Javascript没有呢?这是PHP的回声: console.log(2.111-9.341) 在中,echo将使用以下转换将浮点数转换为字符串: var_dump(sprintf('%.20f', -9.341+2.111)); // string(23) "-7.22999999999999864997" 这基本上意味着科学记数法或%f请参阅

PHP

结果-7.22999999999

我知道浮点运算,但为什么vanilla PHP给出准确答案,而在Google Chrome控制台上测试的Javascript没有呢?

这是PHP的回声:

console.log(2.111-9.341)
在中,echo将使用以下转换将浮点数转换为字符串:

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

这基本上意味着科学记数法或%f请参阅precision configuration directive,默认情况下为14。

您会发现很多PHP也会给出重复数字的地方。两者都使用IEEE 754,echo可能是四舍五入注意PHP浮点是32b还是64b取决于平台-7.23似乎没有有限二进制表示。echo-9.341+2.111==-7.23?真:假;结果:FALSE,那么默认情况下是回显该轮?但是为什么如果我使用var_dumpsprintf'%f',那么-9.341+2.111我得到了-7.230000。是什么让PHP在第二个小数点处取整的?我得到了-7.230000。-你期望得到什么?好吧,那么sprintf默认取整到6个小数点,并回应到15个有意义的数学家,对吗?@FabianoTaioli看到了更新的答案。
var_dump(sprintf('%.20f', -9.341+2.111)); // string(23) "-7.22999999999999864997"
str = zend_strpprintf(0, "%.*G", (int) EG(precision), dval);