Каков результат 'console.log(0.1 + 0.2 === 0.3)' в JavaScript?

Объяснение работы с десятичными числами в JavaScript

Правильный ответ на вопрос, что будет результатом выполнения выражения console.log(0.1 + 0.2 === 0.3) в JavaScript, это "false".

Данное поведение объясняется особенностями работы движка JavaScript с числами с плавающей запятой. Хотя на первый взгляд кажется, что результат сложения 0.1 и 0.2 должен быть равен 0.3, на самом деле из-за компьютерного представления чисел с плавающей запятой результат получается с маленьким отклонением.

В JavaScript все числа представляются в формате IEEE 754, который также называют двоичной системой с плавающей запятой. Это означает, что числа хранятся как бинарные представления, и из-за этого могут возникать неточности в вычислениях.

Приведем пример:

console.log(0.1 + 0.2); // Вывод: 0.30000000000000004

Как вы видите, результат немного больше, чем 0.3. И когда мы сравниваем это число с 0.3, JavaScript сообщает, что значения не равны, или, другими словами, возвращает "false".

Если вам нужно обеспечить точность в вычислениях с десятичными числами, одной из возможных практик является использование функции toFixed(). Она округляет число до заданного количества символов после запятой:

console.log((0.1 + 0.2).toFixed(1)); // Вывод: 0.3

Но стоит учесть, что toFixed() возвращает строку, и для дальнейших вычислений вам, вероятно, понадобится преобразовать результат обратно в число.

Важной рекомендацией может быть также избегание сравнения чисел с плавающей запятой на строгое равенство из-за возможных неточностей представления таких чисел.

Related Questions

Считаете ли это полезным?