为什么toFixed()的四舍五入方式如此奇怪

5

Chrome 29.0.1547.57:

0.0095 .toFixed(3) // "0.009"
0.1095 .toFixed(3) // "0.110"
1.1095 .toFixed(3) // "1.109"

这个函数有什么问题吗? 我知道我可以自己写函数,但问题在于为什么这个库函数会有这么多错误? 根据MDN的说明,它是在JS 1.5中实现的,所以不是新的。或者我没有正确地理解这个函数?

“Buggy”可能不是描述toFixed工作方式的最恰当的词,这只是浮点数的工作方式,这可能是意料之外的。 - chridam
https://dev59.com/a2fWa4cB1Zd3GeqPi6Tg - user700284
2
如果你认为浮点数和四舍五入有问题,那么等你处理混合浮点数和金融交易的代码时就更麻烦了。 - Jeremy J Starcher
1个回答

6
大部分十进制小数的二进制浮点表示并不精确,例如内部表示的0.0095实际上可能是0.00949999,因此toFixed会向下取整,而0.1095可能是0.109500001,这会导致四舍五入。详情请参见Javascript toFixed Not Rounding

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接