ノードv0.8.15とfirebugでこれを試しました:
(123123123123123123123).toString(10)
結果:
'123123123123123130000'
何が起こっているか知っている人はいますか?
ノードv0.8.15とfirebugでこれを試しました:
(123123123123123123123).toString(10)
結果:
'123123123123123130000'
何が起こっているか知っている人はいますか?
JavaScript は数値を 64 ビット浮動小数点 IEEE 754 値として格納するため、最大精度は 2^53 (9007199254740992) です。それを超えるもの、および最下位桁は単に 0 に設定されます。
例えば:
(9007199254740992).toString() // 9007199254740992
(90071992547409925).toString() // 90071992547409920
(900719925474099255).toString() // 900719925474099200
// etc
その桁数の精度が本当に必要な場合は、bignumなどのライブラリを調べる必要があります(著者は、他のそのようなライブラリをリストしています)。
JavaScriptのすべての数値は(他の多くの言語とは異なり)(AFAIK 64ビット)浮動小数点数(決して整数ではありません)として保存されます。
これがどのように機能するのかよく知らない場合は、科学的表記法 (別名標準形式) のようなものです: a * 10 b
123123123123123123123 と入力すると、大きすぎa
て float の部分に収まりません。の値はa
1.2312312312312313 として格納され、最小値のオーバーフロー桁が切り捨てられ、元の値をできるだけ正確に近似b
するために 20 に設定されます。文字列値を取得すると、1.2312312312312313 * 10 20が計算され、123123123123123130000 が得られます。