JavaScript 如何處理長整數 (long/bigint) 數值的問題
Contents
最近發現 JS 無法正常 long (bigint) 數值長度,平常我們會很少用到,之前做報表也不需要吐給前端這個型別資料。但我今天發現這個,在某種情況我們會忽略這個情況。這邊順便做個紀錄。
什麼情況會用到 long 型別
資料表主鍵用 long (bigint)
我們資料庫因為怕有大量資料,我們型別資料會用 long
。早期傳給 JavaScript 可能都不會有問題,但是到真正 long 型別可能就會出事了。
雪花演算法
雪花演算法,一個用程式安全產生主鍵方法,通常產生很長數字,所以我們都會用 long 型別。這個比上面很容易發現 JS 沒法正常吃到 long 型別。
Info
為什麼 JS 會算錯? 詳細可以看這篇 JavaScript 中的长整型精度问题 | 老卫(柳伟卫)的博客 - 关注编程、系统架构、性能优化 | waylau.com,這邊不琢磨這個問題。
解決方法
這邊爬文找到一些方法做紀錄,感覺 long 轉 string 後端處理方式居多。前端通常對 pk 也不會有什麼運算。
後端 long 轉 string
這個很簡單,但麻煩物件導向需要額外設計物件,最後要怎麼優雅調整程式是一個問題。
Json.Serialize
前端處理 long 型別
有找到兩個方法,一個是用函示庫解決,另外一個原生支援 bigint。JSON 處理可以用 parse
解決,但寫起來也很麻煩。感覺前端工程師會不會配合用是一個問題…