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

博客主要探讨JavaScript默认取整的问题,复现了数字操作时精度问题。介绍了使用Math标准库的取整方法,但存在操作别扭、效率偏低的问题。还提出使用按位运算符两次按位取反可快速舍去取整,这是目前已知最快的解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

复现该问题

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

使用Math标准库

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

a362f2f978e3528e6f2315806b475480.png
887fb1d8c4873b2fb72a1c202f32213c.png

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

使用按位运算符

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

示例代码

e346ea1a89ee1fa44eb257bba5e90179.png

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

我自己是一名从事了多年开发的web前端老程序员,目前辞职在做自己的web前端私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的web前端学习干货,各种框架都有整理,送给每一位前端小伙伴,想要获取的可以关注我的头条号并在后台私信我:前端,即可免费获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值