2013-05-21 12 views

答えて

1

実際にあなたが問題ではありません、JavaScriptで1 == 1.0 == 1.00、あなたが1.55のような浮動小数点値を持っている場合:私は、文字列化してファイルに書き込むときにオブジェクトで

{ 
    weight : 1.0 
} 

ただし出力は、重量ですその後、文字列化を使用すると、文字列に値を変更し、1.0が書き込まれるようにしたい場合でも、その後..あなたに同じ1.55 not 1を与える

私は二重引用符で値を囲み意味

{ 
    weight : "1.0" 
} 
+0

JSONファイルが "1.0"と "1"を区別する別の言語で書かれたコードを対象としている場合、これはまだ問題です。 –

+0

これは問題になる可能性があります。例えば。私たちはjavascriptクライアントからのデータを使用するjsonスキーマジェネレータを持っています。問題は、1.0ジェネレータが "number"型を作成しますが、1の場合は "integer"を作成するということです。次に、データが変更されると。 1.2では整数に対して1.2を検証しますが失敗します。 –

4

としては、同様の質問にはthis answerで述べた、とthis MSDN page上:

ではJavaScriptの整数のようなものはありません。 JavaScriptの数値は、「倍精度64ビット形式のIEEE 754値」です。

ウェブブラウザのコンソールを開き、1.0と入力します。 1が印刷されます。 JavaScriptの数値はすべて浮動小数点数なので、シリアライザは不必要な精度を単に残すことにしました。

+3

ですが、 'JSON.stringify(0.1)'と書くと、なぜ '0.1000000000000000055511151231257827021181583404541015625'ではなく' 0.1'が出力されますか?それは必要な精度を残しました –

+0

その数は64ビット浮動小数点数として表現することはできません。一般に浮動小数点数は、3.14159 ... * 2^nという形式では簡単に書き込めない数値を表現するのに悪いです。ここで、「...」は数桁を表し、nは巨大ではありません。 –

関連する問題