有学有练才叫学习:学而不思则罔,思而不学则殆:学而不习,纸上谈兵,习而不进,画地为牢!

js取整(目前已知的最佳解决方案)javascript 解决默认取整的坑

javascript 炮渣日记 2周前 (11-17) 19次浏览 已收录 0个评论 扫描二维码

javascript 解决默认取整的坑(目前已知的最佳解决方案)

复现该问题

js在数字操作时总会取更高精度的结果,例如1234/10结果就是123.4,但是在c或者java中整数除以10的结果还是整数,小数部分被舍去,不仅如此 *,%等运算符也会出现这种结果,但我们有时候更希望舍去取整

使用Math标准库

Math标准库提供了Math.floor():向下取整Math.ceil():向上取整Math.round():四舍五入这三种取整方法,效率也不错,但是在进行一些操作时,总感觉别扭,而且效率会偏低,查看了v8中Math部分的源码后发现需要进行非常多的操作后才能得到结果

js取整(目前已知的最佳解决方案)javascript 解决默认取整的坑

js取整(目前已知的最佳解决方案)javascript 解决默认取整的坑

在进行Math.floor操作时会进行很多操作,复杂度较高,有很多层递归才能获得结果

使用按位运算符

按位运算符中的~是将数字按位取反,位运算是js中计算较快的操作符,把浮点数两次按位取反后可以获得舍去取整的结果即Math.floor(5.6)==~~5.6)这是目前已知的最快解决方法

示例代码

js取整(目前已知的最佳解决方案)javascript 解决默认取整的坑

以上两个函数获取的结果完全一样

喜欢 (0)
炮渣日记
关于作者:
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址