gpt4 book ai didi

IE 中的 JavaScript Math.round 错误

转载 作者:行者123 更新时间:2023-11-29 18:26:12 25 4
gpt4 key购买 nike

这段 JavaScript 演示了 IE 中的一个错误,这个错误现在让我抓狂:

var y = 6044629098073143; // this exact integer easily fits into an IEEE double
document.write(y + " " + Math.round(y)+"<br><br>");

IE 8(和 Opera 12.02)中的输出显示 Math.round 偏移 1:

6044629098073143 6044629098073144

Firefox、Chrome 和 Safari 中的输出是正确的。

IE 和 Opera 到底是怎么回事?

最佳答案

我已经确认 RobG 的评论:所有低于 2^52 (4503599627370496) 的整数似乎在所有浏览器中都正确舍入。在 IE/Opera 中使用 Math.round(而其他浏览器正确舍入),高于此值的整数向上舍入为偶数。

正如 RobG 所提到的,IE 和 Opera 很可能将 Math.round(x) 实现为 Math.floor(x + 0.5),这导致了这些结果,因为将 0.5 添加到 > 2^52 的值会产生不精确的结果.更智能的 round() 实现将使用 FPU 的 native 舍入支持(IE 和 Opera 开发人员,请注意并修复!)

与此同时,此解决方法应该有效:

// workaround for IE and Opera's brain-dead Math.round() implementation
if (y < 4503599627370496) // 2^52
{
y = Math.round(y);
}
// else 'y' is already an integer

关于IE 中的 JavaScript Math.round 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12830742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com