1. 程式人生 > 實用技巧 >js精度丟失 es11新出BigInt 的可以解決 BigInt 可以表示任意精度格式的整數

js精度丟失 es11新出BigInt 的可以解決 BigInt 可以表示任意精度格式的整數

//Number型別在超過9009199254740991後,計算結果即出現問題
const num1 = 90091992547409910;
console.log(num1 + 1); //90091992547409900

//BigInt 計算結果爭取
const num2 = 90091992547409910n;
console.log(num2 + 1n); //90091992547409911n
//Number 型別不能表示大於 2 的 1024 次方的數值
let num3 = 9999;
for(let i = 0; i < 10; i++) {
    num3 = num3 * num3;
}
console.log(num3); //Infinity

//BigInt 型別可以表示任意位數的整數
let num4 = 9999n;
for(let i = 0n; i < 10n; i++) {
    num4 = num4 * num4;
}
console.log(num4); //一串超級長的數字,這裡就不貼了

我們還可以使用 BigInt 物件來初始化 BigInt 例項:
console.log(BigInt(999)); // 999n 注意:沒有 new 關鍵字!!!

需要說明的是,BigInt 和 Number 是兩種資料型別,不能直接進行四則運算,不過可以進行比較操作。
console.log(99n == 99); //true
console.log(99n === 99); //false 
console.log(99n + 1);//TypeError: Cannot mix BigInt and other types, use explicit conversionss