You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用位运算替代%1与Math.round优化JS浮点数转换函数?

位运算替代方案

1. 替换number % 1 == 0整数判断

JS 中所有位运算都会先将操作数强制转换为32位有符号整数,自动丢弃小数部分,所以只要判断「位运算取整后的结果」和「原数」是否相等即可,正确写法:

if ((number | 0) === number)

注意:该判断仅对范围在 -2^31 ~ 2^31-1 之间的数有效,如果你的业务场景中会出现超过这个范围的整数,可以保留原%1的写法,实际性能差异极小。

2. 替换Math.round(number)四舍五入

Math.round的核心逻辑是:正数加0.5后向下取整,负数减0.5后向下取整。用位运算实现的写法如下:

  • 仅处理正数(适配你当前的业务场景):
(number + 0.5) | 0
  • 兼容正负数的通用写法:
number + (number > 0 ? 0.5 : -0.5) | 0

优化后的完整代码

建议同时把递归改成迭代,避免递归调用的栈开销,性能提升更明显:

function get_whole_number(number, exponent = 0) {
    while(exponent < 500) {
        if ((number | 0) === number) break;
        exponent++;
        number *= 2;
    }
    return [(number + 0.5) | 0, exponent];
}

console.log(
  get_whole_number(1.125).join("/2^"));

内容的提问来源于stack exchange,提问作者Krokodil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:18:04