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

为何JavaScript中两位小数乘100有时得非整数?求解决方案

JavaScript小数乘100出现精度误差的原因与解决办法

原因

JavaScript使用IEEE 754双精度浮点数存储所有数值,而十进制里的很多小数(比如0.01、0.02这类)无法用二进制浮点数精确表示,只能存储一个近似值。当你把这类近似值的两位小数乘以100时,原本被隐藏的微小误差就会被放大,导致结果出现多余的小数位。

比如4.98在内存里实际存储的是一个接近4.98但略大于它的近似值,乘以100后,这个微小的偏差就变成了0.00000000000006,最终得到498.00000000000006;而像4.55这类小数,刚好能被二进制浮点数精确表示,所以乘100后得到准确的整数455。

解决办法

这里有几种实用的处理方式,根据你的场景选择:

  • 字符串转整数法:直接把小数转成字符串,去掉小数点后转成数字,完全绕开浮点数运算:

    const num = 4.98;
    const result = parseInt(num.toString().replace('.', ''), 10); // 498
    
  • 四舍五入取整:用Math.round()把运算结果四舍五入到最近的整数,适合不需要绝对精确但要整数结果的场景:

    const result = Math.round(4.98 * 100); // 498
    
  • 固定小数位后转数字:用toFixed(0)先把结果格式化为0位小数的字符串,再转成数字:

    const result = Number((4.98 * 100).toFixed(0)); // 498
    
  • BigInt精确运算:如果涉及金额、财务这类需要绝对精确的场景,建议把数值转成最小单位(比如分)用BigInt处理:

    // 直接从字符串转成BigInt(避免浮点数初始化的误差)
    const numStr = '4.98';
    const result = BigInt(numStr.replace('.', '')); // 498n
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:57:23