次のダミー テスト スクリプトがあります。
function test() {
var x = 0.1 * 0.2;
document.write(x);
}
test();
0.020000000000000004
これは、結果だけを印刷するはずですが(計算機を使用する場合)、結果が印刷されます0.02
。私の理解では、これは浮動小数点乗算の精度のエラーによるものです。
このような場合に正しい結果が得られる良い解決策を誰か知っていますか0.02
? のような関数があることや、丸めも別の可能性があることは知っていますtoFixed
が、切り捨てや丸めをせずに数値全体を印刷したいのです。皆さんの中に何か素敵でエレガントな解決策があるかどうか知りたかったのです。
もちろん、そうでなければ 10 桁程度に丸めます。
ベストアンサー1
から浮動小数点ガイド:
この問題を回避するにはどうすればいいでしょうか?
それは、どのような計算を行っているかによって異なります。
- 特にお金を扱う場合など、結果を正確に合計する必要がある場合は、特別な 10 進データ型を使用します。
- 余分な小数点以下の桁をすべて表示したくない場合は、結果を表示するときに、小数点以下の桁数を固定して丸めてフォーマットするだけです。
- 利用できる小数データ型がない場合は、整数を使用して作業する方法もあります。たとえば、金額の計算をすべてセント単位で行います。ただし、これは作業量が多く、いくつかの欠点があります。
最初のポイントは、特定の正確な小数点の動作が本当に必要な場合にのみ適用されることに注意してください。ほとんどの人はそれを必要としません。彼らは、プログラムが 1/10 のような数値で正しく動作しないことにイライラしているだけで、1/3 で同じエラーが発生した場合でもまったく気にしないということに気づいていません。
最初のポイントが本当にあなたに当てはまる場合は、JavaScript 用の BigDecimalまたはデシマルJSこれは、不完全な回避策を提供するのではなく、実際に問題を解決します。