JavaScript 中的大數字被錯誤截斷
問題出現了,為什麼從JSON 字串解析大數字(例如7143412520769790333)被錯誤捨去使用JSON.parse()。控制台中的結果值顯示為截斷的數字,並且刪除了有效數字。
解答
出現這種現像是因為 JavaScript 的數字類型,它基於 IEEE-754雙精度浮點,在表示大整數時有限制。雙精度浮點的最大安全整數值為 9,007,199,254,740,991 (Number.MAX_SAFE_INTEGER)。超過此點,浮點表示的精度會降低,導致連續整數的捨去。
在這種特定情況下,正在解析的大數字大大超出了 Number.MAX_SAFE_INTEGER。因此,JavaScript 使用的捨入演算法會截斷最低有效數字,以在浮點系統的限制內盡可能接近表示數字。
解決方法
為了避免這個問題,建議使用 BigInt 來表示超出 JavaScript 數字類型容量的大整數。 BigInt是ES2020中新增的資料類型,可以處理任意長度的整數。但是,需要注意的是,JSON 本身不支援 BigInt,因此必須使用替代方法來表示和解析大整數。
一種方法是在解析 JSON 時使用 reviver 函數。 reviver 函數可以將大整數的字串表示形式轉換為 BigInt 對象,從而使其能夠在 JavaScript 應用程式中正確處理。
以上是為什麼在 JavaScript 中使用 JSON.parse() 時大數字會被截斷?的詳細內容。更多資訊請關注PHP中文網其他相關文章!