JavaScript: сложение чисел с плавающей запятой
объясняем особенности сложения чисел с плавающей запятой в JavaScript
Какой результат будет получен, если вывести в консоль результаты сравнения операций сложений некоторых нецелых чисел с ожидаемым результатом, например, 0.1 + 0.2 === 0.3
?
Разберем следующие примеры:
console.log(0.1 + 0.2 === 0.3)
console.log(0.1 + 0.7 === 0.8)
console.log(0.1 + 0.2 - 0.2 === 0.1)
console.log(0.1 + 0.4 === 0.5)
Результат:
false
false
false
true
Следует знать, что JavaScript использует не десятичную, а двоичную систему счисления. Для человека число 0.1
в привычной десятичной системе счисления выглядит именно как 0.1
. В двоичной системе счисления, это число имеет бесконечную двоичную дробную часть и выглядит как 0.000110011001100110011…
.
JavaScript складывает двоичные представления чисел, а затем конвертирует результат обратно в десятичную систему счисления.
К примеру, представления чисел 0.1
и 0.2
в двоичной системе не точны, поэтому результат их сложения будет равен приблизительно 0.30000000000000004
.
0.1 + 0.2 равно 0.30000000000000004
0.1 + 0.7 равно 0.7999999999999999
0.1 + 0.2 - 0.2 равно 0.10000000000000003
Спасибо за внимание.