店舗価格のデータベースでは、浮動小数点型(10進数である必要があります)を使用しないでください。 JavaScriptには価格が安いのでparseFloat()
?JavaScriptでparseFloatは安全ですか?
例えば、私は1000000の数値を持つ配列を持っており、すべてを浮動小数点に解析し、セット全体およびさまざまな操作を行いたいと思います。
店舗価格のデータベースでは、浮動小数点型(10進数である必要があります)を使用しないでください。 JavaScriptには価格が安いのでparseFloat()
?JavaScriptでparseFloatは安全ですか?
例えば、私は1000000の数値を持つ配列を持っており、すべてを浮動小数点に解析し、セット全体およびさまざまな操作を行いたいと思います。
"安全"とは何を意味しているのかによって異なりますが、一般的には浮動小数点演算を使用しないでください。 parseFloat
は、結果の浮動小数点数が最も近い丸め、均等に丸められる丸めモードに従って最も近いIEEEの倍数であることを保証します。ほとんどの場合、これは小さな丸めエラーになります:
> parseFloat("0.11").toFixed(40)
< "0.1100000000000000005551115123125782702118"
さらに数学的な操作は、丸め誤差が増加します。 toFixed(2)
で最終結果を小数点以下2桁に丸めた場合、ほとんどの場合、期待される結果が得られるはずです。しかし、これは保証されません:あなたは本当に何をやっている知っている限り、安全のために最小通貨単位の整数値で動作
> parseFloat("1.37") * 90 * 90 * 90 * 90 * 90 * 90 * 90 * 90
< 5897400777000001
。 JavaScriptの数値型は、up to 253-1 exactlyの整数しか格納できないことに注意してください。
浮動小数点数は浮動小数点数なので、同じ警告が適用されます。JavaScriptでは0.1 + 0.2は0.3ではありません。 10 + 20は30であるため、分数通貨を扱うことは一切なく、整数の小さな通貨単位を使います。 –