2017-08-31 7 views
0

JSONResultのコントローラから正確なID(123456789123456.99)を渡していますが、AJAX応答の値を取得するとId(123456789123456.98など)が返されます。10進数値の解析の問題

データの解析中にJavaScriptで奇妙な動作が確認されました。下の画像をご覧ください。誰でもJSONを解析した後、同じIDを取得するためにここで私を助けてくれますか?

enter image description here

+0

が文字列でないでしょうか? – Teemu

+0

浮動小数点数の世界へようこそ.JSONの問題でもありません。大規模な数値の扱いを改善するために、javascriptにいくつかのBCD実装があります。 – Keith

+0

これは浮動小数点の不正確さと関係があると私は信じています。https://stackoverflow.com/questions/2100490/floating-point-inaccuracy-examples – Mike

答えて

2

Id値が大きすぎます。 JavaScriptは数値に倍精度の浮動小数点数を使用し、精度は約15桁です。 JavaScriptが確実に保存できる最も高い整数は2^51のようなものです。そのため、解析すると値が丸くなります。

しかし、あなたはそうのような文字列として番号を送信することでこの制限を回避することができます

var res = '{"Id":"123456789123456.99"}'; 
+0

私のモデルに文字列を含む新しいプロパティを追加したくありません。他の解決策はありますか? – Ronak