JavaScript использует стандарт IEEE 754 двойной точности (double-precision floating-point) для представления чисел. В этом формате некоторые десятичные значения, такие как 0.1 и 0.2, не могут быть представлены точно в двоичном виде — похоже на то, как 1/3 не может быть выражено точно в десятичной системе.
В результате их сумма даёт небольшую ошибку округления:
0.1 + 0.2 === 0.30000000000000004 // true
Из-за этой неточности использование строгого равенства (===) для сравнения float'ов ненадёжно. Правильный подход — проверить, находится ли разница между двумя значениями в пределах допустимого порога погрешности.
JavaScript предоставляет Number.EPSILON — наименьшую представимую разницу между двумя различными числами — которая отлично подходит в качестве значения допуска:
Math.abs(0.1 + 0.2 - 0.3) < Number.EPSILON // true
=== для прямого сравнения чисел с плавающей точкойMath.abs()Number.EPSILON — стандартная встроенная константа для этой целиJavaScript точно представляет все десятичные числа в двоичном формате, поэтому 0.1 + 0.2 дает ровно 0.3 при использовании строгого сравнения.
Новый — ещё не проверен сообществом
Вы