2012-03-06 4 views
5

私はFacebook上のクライアントの1人が問題を抱えていた理由を理解しようとしていましたが、10150141932135203という数字にトレースして、予期せぬ結果をもたらしました。なぜconsole.log(10150141932135203)はFirefoxとChromeの両方で10150141932135204を印刷し、これらのような大きな整数値を扱うのですか?

$ node 
> 10150141932135203 
10150141932135204 
> 10150141932135204 
10150141932135204 
> 10150141932135205 
10150141932135204 
> 10150141932135206 
10150141932135206 
> 10150141932135207 
10150141932135208 
> 10150141932135208 
10150141932135208 
> 10150141932135209 
10150141932135208 
> 10150141932135210 
10150141932135210 

どのようにこのサイズの整数を扱うことができますか?

+0

[Javascript summing large integers](http://stackoverflow.com/questions/4557509/javascript-summing-large-integers)と他の多くの多くの可能性があります。 – bernie

+0

@AdamBernier私は算術演算を行っていませんが、うん、たぶん。 –

答えて

4

数字がIEEE 754の仕様よりも大きい場合(2 )、これらの数値は精度が低下します。

JavaScriptの場合はBinary Coded Decimalライブラリを使用できます。 BCMathJs

数字は算術演算を行う必要がある場合にのみ当てはまります。そうでない場合は、文字列として保管してください。

+1

その1つ1つのFacebookアプリケーションがそのサイズのFacebook UIDと確実に会話できなくなると、そのライブラリは狂気になります。 –

+2

@KitSunde算術演算を実行していない場合は、文字列として保持してください。 – alex

+0

あなたはまた純粋にどんなサイズの整数のライブラリも持っています。例えば、https://github.com/silentmatt/javascript-biginteger –

関連する問題