0

ノードv0.8.15とfirebugでこれを試しました:

(123123123123123123123).toString(10)

結果: '123123123123123130000'

何が起こっているか知っている人はいますか?

4

2 に答える 2

2

JavaScript は数値を 64 ビット浮動小数点 IEEE 754 値として格納するため、最大精度は 2^53 (9007199254740992) です。それを超えるもの、および最下位桁は単に 0 に設定されます。

例えば:

(9007199254740992).toString()    // 9007199254740992
(90071992547409925).toString()   // 90071992547409920
(900719925474099255).toString()  // 900719925474099200
// etc

その桁数の精度が本当に必要な場合は、bignumなどのライブラリを調べる必要があります(著者は、他のそのようなライブラリをリストしています)。

于 2013-08-26T21:01:16.407 に答える
2

JavaScriptのすべての数値は(他の多くの言語とは異なり)(AFAIK 64ビット)浮動小数点数(決して整数ではありません)として保存されます。

これがどのように機能するのかよく知らない場合は、科学的表記法 (別名標準形式) のようなものです: a * 10 b

123123123123123123123 と入力すると、大きすぎaて float の部分に収まりません。の値はa1.2312312312312313 として格納され、最小値のオーバーフロー桁が切り捨てられ、元の値をできるだけ正確に近似bするために 20 に設定されます。文字列値を取得すると、1.2312312312312313 * 10 20が計算され、123123123123123130000 が得られます。

于 2013-08-26T21:08:25.177 に答える