JavaScript 数字精度丢失原因及解决方案

作者:青柠时间:2026-10-21 22:49:11浏览:277

JavaScript 遵循 IEEE 754 双精度标准,受限于 64 位存储,部分数值无法精确表示,导致计算出现舍入误差。本文分析误差成因,探讨 toFixed 方法的兼容性局限,并提供基于 Math.round 的自定义舍入函数方案,同时指出大于 Math.pow(2, 53) 的大整数仍存在精度丢失风险。

JavaScript 数字精度丢失原因及解决方案

1、起因:

JavaScript 数字精度丢失原因及解决方案

返回结果是true。

2、原因:计算机的二进制实现和位数限制导致部分数值无法有限表示,类似于圆周率3.1415926...或1.3333...等无理数。JS遵循IEEE 754规范,采用双精度存储(double precision),占用64 bit。

3、解决方法

(1)toFixed(),存在兼容性(chrome)

JavaScript 数字精度丢失原因及解决方案

(2)比较稳妥方法(数字如果过大,也会有误差):

*JS中能精准表示的最大整数是Math.pow(2, 53),十进制即9007199254740992。大于9007199254740992的数值可能会丢失精度


function round(num,d){

//Step1:将num放大10的d次方倍

num*=Math.pow(10,d);

//Step2:对num四舍五入取整

num = Math.round(num);

//Step:返回num缩小10的d次方倍,获得最终结果

return num/Math.round(10,d);

}

console.log(round(123.456)); //123.46

以上这篇js数字舍入误差以及解决方法(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。

作者最新文章