12

私の問題は非常に単純ですが、JSON.parse を使用した「ネイティブ」ソリューションがあるかどうかはわかりません。

API からこの文字列を受け取ります。

{ "key" : -922271061845347495 }

この文字列で JSON.parse を使用すると、次のオブジェクトに変わります。

{ "key" : -922271061845347500 }

ご覧のとおり、数値が長すぎると解析が停止します (この動作はこちらで確認できます)。正確な数字は 15 桁しかなく、最後の数字は丸められ、それ以降は 0 に設定されます。正確な値を維持するための「ネイティブ」ソリューションはありますか? (IDなので丸められません)

この問題を解決するために正規表現を使用できることはわかっていますが、「ネイティブ」メソッドが存在する場合はそれを使用したいと思います。

4

2 に答える 2

19

特定の数字の後に解析が停止するというあなたの仮定は正しくありません。

それはここに言います:

JavaScript では、すべての数値は浮動小数点数です。JavaScript は、標準の 8 バイト IEEE 浮動小数点数値形式を使用します。つまり、範囲は次のとおりです。

±1.7976931348623157 x 10 308 - 非常に大きく、±5 x 10 -324 - 非常に小さい。

JavaScript は浮動小数点数を使用するため、精度は -9007199254740992 (-2 53 ) から 9007199254740992 (2 53 )の間の整数に対してのみ保証されます。

数値が「正確な」範囲外であるため、JavaScript 数値の最も近い表現に変換されます。この数値を (JSON.parse、eval、parseInt を使用して) 評価しようとすると、データが失われます。したがって、キーを文字列として渡すことをお勧めします。API を管理していない場合は、機能リクエストを提出してください。

于 2012-05-17T07:23:19.817 に答える