JavaScript 中类型转换会丢失精度吗
在 javascript 中,涉及浮点数(number)的隐式或显式类型转换通常会丢失精度。这主要发生在将大整数转换为浮点数时,因为 ieee 754 双精度浮点数的有效位只有 53 位,无法精确表示超过 number.max_safe_integer 的整数。此外,将十进制小数(如 0.1)转换为二进制浮点数时也会产生微小的精度误差。

哪些具体场景会导致精度丢失
最常见的精度丢失场景包括:大整数通过 String() 或模板字符串转为字符串再转回 Number;使用 parseFloat() 解析包含大整数的字符串;以及直接进行涉及小数的算术运算。这些操作都会触发从高精度整数到低精度浮点数的转换,导致数据失真。

const bigInt = 9007199254740993; // 大于 MAX_SAFE_INTEGER const str = String(bigInt); // "9007199254740992" (已丢失精度) const num = parseFloat(str); // 9007199254740992 console.log(num === bigInt); // false
如何避免精度丢失
如果需要处理大整数或高精度小数,应避免使用 Number 类型。对于大整数,应使用 BigInt 类型,它支持任意精度的整数运算。对于金融计算等需要高精度的场景,可以使用专门的库(如 bignumber.js)或将数值存储为整数(如以分为单位)并在展示时进行格式化。

const bigInt = 9007199254740993n; // 使用 BigInt const str = String(bigInt); // "9007199254740993" const num = BigInt(str); // 9007199254740993n console.log(num === bigInt); // true
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











