[問題] Javascript 加法不正確的問題

作者: heavenbetula (綠草)   2020-02-03 17:56:26
本來專案需求需要判斷 mac address 來做位址的大小比較,
想到的做法是直接將16進制轉為十進制
例如 mac address 為 "FF-FF-FF-FF-FF-FF"
先轉成陣列紀錄十進制 [255, 255, 255, 255, 255, 255]
再考慮十進制位數補0變成
[255000000000000000, 255000000000000, 255000000000, 255000000, 255000, 255]
但問題來了,將此陣列的所有值加起來
變成 255255255255255260
而不是正確的 255255255255255255
過去只有小數點的計算會遇到運算錯誤,但是這次都是整數,是為什麼呢?
請問有什麼解法呢?
作者: tino1991 (深白)   2020-02-03 18:32:00
應該是太長了吧 標準整數長度 Number.MIN_SAFE_INTEGER排序可以試看看 Array.sort + String.localeCompare
作者: jfcherng (小霹靂)   2020-02-03 23:29:00
直接 mac addr string 比大小
作者: jherk   2020-02-03 23:29:00
BigInt()
作者: LPH66 (-6.2598534e+18f)   2020-02-03 23:39:00
或者反過來, 不要轉成十進位, 直接用原字串比大小就好
作者: jfcherng (小霹靂)   2020-02-03 23:41:00
直接 if (stringA > stringB) ...
作者: b85040312 (萬年newman)   2020-02-04 00:51:00
搜尋大數加法

Links booklink

Contact Us: admin [ a t ] ucptt.com