参考这篇文章: math-round-vs-hack
我们已经优化了数学函数。
我们使用(num+0.5)|0
代替Math.round()
。
但是有一个问题让人感到困惑的是,当num> 2147483647,结果出错了。
function round(n) {
return (n + 0.5) | 0;
};
round(2147483648)
将返回-2147483648
根据维基百科:
计算中的2147483647
数字2,147,483,647也是>计算中32位有符号整数的最大值。因此,在流行的CPU上运行的许多>编程语言中声明为int的变量的最大值,以及许多视频游戏的最大可能分数(或金额>)。数字的出现通常反映出错误,>溢出条件或缺失值。[8]同样,"(214)748-3647"是表示为美国电话号码的>数字序列,是网页上列出的最常见的电话号码> [9] 在诸如Unix之类的操作系统上使用的数据类型time_t是32位有符号整数>计算自Unix纪元开始以来的秒数(午夜UTC的1> 1970年1月)。[10]可以这种方式表示的最新时间是03:14:07 UTC on> 2038年1月19日星期二(对应于> epoch开始以来的2,147,483,647秒),因此使用32位time_t类型的系统是易受2038年问题影响。[11]
如何处理这种情况以确保良好的表现?
答案 0 :(得分:3)
简答:使用Math.round()
我会将这整个练习归结为“为什么你永远不应该进行微观优化”。看看这个小提琴:http://jsfiddle.net/toxicsyntax/a5rWm/2/
以下是来自不同浏览器的一些结果:
当然,在最好的情况下,按位循环函数比使用Math.round()更快,但它真的重要吗?最坏的情况Math.round()仍处理数百万回合。秒没有问题。
你需要做多少舍入?除了显示数字之外,我不希望你必须在javascript中对数字进行舍入,即使你显示数千个舍入数字pr。第二,Math.round()对你来说仍然足够快。
更新
另外,关于微观优化,一定要查看Coding Horror的文章:http://www.codinghorror.com/blog/2009/01/the-sad-tragedy-of-micro-optimization-theater.html
微观优化很少是一个好主意。