js超長數字溢出問題


tags: #js #聯調 #踩坑 #output

https://www.cnblogs.com/wudanyang/p/15940613.html

現象

之前遇到過的一個問題
接口要返回給前端(js)一個比較長的數字:759830849237899244

看了接口返回是沒問題的,但是前端拿着數字去取詳情的時候,傳過來的是另外一個數字:759830849237899300

一比較,看起來是數字被轉換了

759830849237899244 => 759830849237899300

在前端控制台執行一下:
![[Pasted image 20220226212150.png]]
果然被轉成了另外一個數字,而且看規律很像是后三位被上取整了

原理

后來了解到js會將數字按照下圖方式切分后表示數字,以至於最高表示的數字只能到 9007199254740991 比這個數字更大的數字就會發生進位溢出
![[Pasted image 20201109201831.png]]

解決方案

解決方案很好辦,那就是將數字轉成字符串,只要前端不強轉成數字,那就不會出問題
![[iShot2022-02-26 21.46.09.jpg]]

參考文檔

JSON Bigint 大數精度丟失的背后

JSON.parse parses / converts big numbers incorrectly


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM