1. ホーム
  2. javascript

JavaScriptで大きな数値の丸め誤まってしまう

2023-09-24 17:08:19

質問

このコードを見てください。

var jsonString = '{"id":714341252076979033,"type":"FUZZY"}';
var jsonParsed = JSON.parse(jsonString);
console.log(jsonString, jsonParsed);

Firefox 3.5でコンソールを表示したところ jsonParsed は丸められた数字になります。

Object id=714341252076979100 type=FUZZY

異なる値を試してみましたが、同じ結果でした(数値は丸められます)。

また、その丸めのルールもよくわかりません。714341252076979136 は 714341252076979200 に丸められ、一方、714341252076979135 は 714341252076979100 に丸められます。

なぜこのようなことが起こるのでしょうか。

どのように解決するのですか?

ここで見ているものは、実際には2つの丸めの効果です。 ECMAScript の数値は、内部的には倍精度浮動小数点で表現されます。 このとき id に設定されると 714341252076979033 ( 0x9e9d9958274c359 である)、実際には最も近い表現可能な倍精度値が割り当てられ、それは 714341252076979072 ( 0x9e9d9958274c380 ). この値をプリントアウトすると、有効数字15桁に丸められ、その結果 14341252076979100 .