我遇到一个奇怪的问题,在我的单元测试给我带来了在JavaScript中意外舍入的结果之一:
(2.005).toFixed(2)
// produces "2.00"
(2.00501).toFixed(2)
// produces "2.01"
起初我怀疑这是一个Webkit的只是在壁虎的问题,但它repros这意味着,我认为这是任何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的一部分,或者它们有一个bug。