2

parseInt()を使用していくつかの大きな素数を取得していましたが、期待どおりに機能しています。例えば、

parseInt("18014398241046527", 10); // Gives me 18014398241046528??
parseInt("18014398241046528", 10); // Gives me 18014398241046528
parseInt("18014398241046529", 10); // Still gives me 18014398241046528??

Chromeバージョン20.0.1132.47とFirefox12.0の両方でテストしました。これは、解析しようとした数値が大きすぎたためですか?

4

2 に答える 2

5

JavaScriptの数値は浮動小数点倍精度であり、最大53ビットの精度(約16桁の10進数)しか含めることができません。質問の番号は17桁であるため、正確に番号を保存することはできません。

JavaScriptの構文/数値に関するウィキペディアの記事。

JavaScript(1.1)標準への参照。

于 2012-07-05T06:22:59.087 に答える
0

これはparseInt;の問題ではありません。この数値は、JavaScriptの数値データ型に対して長すぎます(正確すぎる-nhahtdhの回答を参照)(証明:+"18014398241046527"yields18014398241046528も)。

これを回避する唯一の方法は、数値を文字列として入力し、チャンクで処理することだと思います。

于 2012-07-05T06:22:08.987 に答える