在开发过程中,经常会遇到当number位数达到一定时就会对数据进行四舍五入,但是还不是全部数据都会存在有这种规律,原因是
JS 提供Number.MAX_SAFE_INTEGER
常量来表示 最大安全整数,Number.MIN_SAFE_INTEGER
常量表示最小安全整数:
Number.MAX_SAFE_INTEGER : 9007199254740991 Number.MIN_SAFE_INTEGER : -9007199254740991
确切地说,JS 中的Number
类型只能安全地表示-9007199254740991 (-(2^53-1))
和9007199254740991(2^53-1)
之间的整数,任何超出此范围的整数值都可能失去精度。
解决方案:
方案一:利用string代替number;
方案二:使用BigInt类型,是js为了支持范围粳稻的整数值二引入的类型,对整数的溢出将不再是问题。
如何使用BigInt:
未引入BigInt,会四舍五入, var t = 9999999999999999 console.log(t) //10000000000000000 引入BigInt 方式一:直接在整数的末尾加上n var kk = 9999999999999999n console.lob(kk) //9999999999999999n 方式二:使用BigInt构造函数 var k = BigInt("9999999999999999") console.log(k) //9999999999999999n
注意:BigInt 存在兼容性问题;在IE和Safari和Safari oniOS 下是完全不支持的;
更多详细的BigInt的用法如运算 、进制等请参见:
参考文章:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/BigInt