复现该问题
JS 在数字操作时总会取更高精度的结果, 例如 1234/10 结果就是 123.4, 但是在 c 或者 java 中整数除以 10 的结果还是整数, 小数部分被舍去, 不仅如此 *,% 等运算符也会出现这种结果, 但我们有时候更希望舍去取整
使用 Math 标准库
Math 标准库提供了 Math.floor(): 向下取整 Math.ceil(): 向上取整 Math.round(): 四舍五入这三种取整方法, 效率也不错, 但是在进行一些操作时, 总感觉别扭, 而且效率会偏低, 查看了 v8 中 Math 部分的源码后发现需要进行非常多的操作后才能得到结果
在进行 Math.floor 操作时会进行很多操作, 复杂度较高, 有很多层递归才能获得结果
使用按位运算符
按位运算符中的~ 是将数字按位取反, 位运算是 JS 中计算较快的操作符, 把浮点数两次按位取反后可以获得舍去取整的结果即 Math.floor(5.6)==~~5.6) 这是目前已知的最快解决方法
示例代码
以上两个函数获取的结果完全一样
我自己是一名从事了多年开发的 web 前端老程序员, 目前辞职在做自己的 Web 前端私人定制课程, 今年年初我花了一个月整理了一份最适合 2019 年学习的 Web 前端学习干货, 各种框架都有整理, 送给每一位前端小伙伴, 想要获取的可以添加我的 Web 前端交流群 600610151, 即可免费获取.
来源: http://www.jianshu.com/p/428400a4ccf1