JavaScript 数字精度丢失原因及解决方案
作者:青柠时间:2026-10-21 22:49:11浏览:277
JavaScript 遵循 IEEE 754 双精度标准,受限于 64 位存储,部分数值无法精确表示,导致计算出现舍入误差。本文分析误差成因,探讨 toFixed 方法的兼容性局限,并提供基于 Math.round 的自定义舍入函数方案,同时指出大于 Math.pow(2, 53) 的大整数仍存在精度丢失风险。
JavaScript 数字精度丢失原因及解决方案
1、起因:

返回结果是true。
2、原因:计算机的二进制实现和位数限制导致部分数值无法有限表示,类似于圆周率3.1415926...或1.3333...等无理数。JS遵循IEEE 754规范,采用双精度存储(double precision),占用64 bit。
3、解决方法
(1)toFixed(),存在兼容性(chrome)

(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数字舍入误差以及解决方法(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。
作者最新文章
ES6模块化中js文件怎么用import和export交互
2026-11-05 17:00:48
JS读取本地文件时报错或无响应的常见原因
2026-11-05 16:32:31
let、const与var的区别:JavaScript变量声明最佳实践
2026-11-05 14:16:38
JS中直接定义静态二维数组的字面量写法
2026-11-05 14:16:08
JS 怎么查找字符串中所有匹配项的位置
2026-11-05 14:15:53
