重複の可能性:
JavaScript 浮動小数点数の問題に対する洗練された回避策
Javascript が使用する 1985 年からの IEEE 754 標準が原因で、浮動小数点演算を確実に実行できないという事実に対する回避策が必要です。基本的に、5+3*(2+8/6) のような式を評価する方法が必要です。文字列でそれを行い、基本的な操作 (+-*/%) のために独自の関数をローリングすることを考えていますが、これを既に実行しているライブラリを知っているかどうか最初に疑問に思いました。
重複の可能性:
JavaScript 浮動小数点数の問題に対する洗練された回避策
Javascript が使用する 1985 年からの IEEE 754 標準が原因で、浮動小数点演算を確実に実行できないという事実に対する回避策が必要です。基本的に、5+3*(2+8/6) のような式を評価する方法が必要です。文字列でそれを行い、基本的な操作 (+-*/%) のために独自の関数をローリングすることを考えていますが、これを既に実行しているライブラリを知っているかどうか最初に疑問に思いました。
数字がどれだけ大きいかによって異なります。小さい数値 (有効桁数が 14 桁未満など) の場合は、許容できる精度に丸めることで問題が解決する場合があります。たとえば、あなたの例を考えると:
var n = 0.5 / 5 + 1 / 5; // 0.30000000000000004
var p = Math.pow(10, 14); // where 14 is calculated based on the first
// significant digit and its relationship to
// the decimal place
n = Math.round(n * p) / p; // 0.3
使用する 10 のべき乗を計算することは、それほど難しいことではありません。数が多い場合、生活はより困難になります (既存のライブラリを参照してください)。