[英]Unable to increase extremely large number by one in JavaScript
我9223372036854775808
這個數字增加一個: 9223372036854775808
:
var number = 9223372036854775808;
var plusOne = number + 1;
這應該產生922337203685477580 9 ,但它產生9223372036854776000。
為什么? 更重要的是,我該如何解決這個問題?
JavaScript中最大的可表示數字是(2^53) - 1
,或者,寫出來的, 9007199254740991
。 您擁有的號碼9223372036854775808
是該數量的1024倍 。
如果要使用大於上面的數字,則應使用大整數庫。 但是,JavaScript沒有內置的,因此您需要自己抓取它。 就個人而言,當我處理涉及非常大數字的事情時,我使用大整數 ,例如Project Euler。
這與JavaScript內部存儲數字為(雙精度)浮點有關。 隨着浮點數的增加,數字變得越來越稀疏,直到你得到不正確的結果,因為下一個可表示的數字超過1(如你的例子中所示)。 要正確處理大數字,您需要使用適當的大數字庫,例如javascript-bignum 。 如果只需要整數,可以使用BigInteger.js
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.