js 的Number类型数据对超范围的整数会自动四舍五入

在开发过程中,经常会遇到当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

                  https://segmentfault.com/a/1190000019912017

原文地址:https://www.cnblogs.com/xhliang/p/12955727.html