我在我的一个单元测试中遇到了一个奇怪的问题,我在 JavaScript 中得到了意想不到的舍入结果:
(2.005).toFixed(2)
// produces "2.00"
(2.00501).toFixed(2)
// produces "2.01"
最初我怀疑这是一个 Webkit 唯一的问题,但它在 Gecko 中重现,这对我来说意味着它是 ECMA-262 或 IEEE-754 的预期副作用。我假设 2.005 的二进制表示会稍微少一点?或者 ECMA-262 是否指定了一种四舍五入的方法toFixed
?
任何人都愿意对引擎盖下发生的事情有所了解,只是为了让我高枕无忧?
更新:感谢您的评论。
我应该补充一下,让我有点紧张的一件事是在 Webkit 中的快速搜索中发现的评论dtoa.cpp
似乎暗示有多种舍入路径,开发人员并不确定它是如何工作的,包括相关的FIXME
:
https://trac.webkit.org/browser/trunk/Source/WTF/wtf/dtoa.cpp#L1110
此外,这并不是说它意义重大,而是 IE9 像我预期的那样对其进行了舍入,这意味着它不是 ECMA-262 的一部分,或者它们有一个错误。