在開發過程中,經常會遇到當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