Вернуться к статьям

Float с собственной тенью: числа с плавающей точкой не согласны даже сами с собой

8 мая 2026
1 мин чтения
Float с собственной тенью: числа с плавающей точкой не согласны даже сами с собой

Почему 0.1 + 0.2 не равно 0.3 и как с этим жить — разбор коварства IEEE 754.

Разработчики, держитесь за стулья: числа с плавающей точкой, оказывается, не дружат сами с собой. Статья от Merca Earth вскрывает старую, как мир, боль — 0.1 + 0.2 в JavaScript упорно даёт 0.30000000000000004. И это не баг, а фича стандарта IEEE 754.

Почему так происходит?

Все дело в двоичной арифметике: десятичные дроби вроде 0.1 невозможно точно представить конечным числом бит. Это как попытаться записать 1/3 в десятичной системе — получится бесконечное 0.3333... Только в случае float компьютер округляет, и начинается магия.

Вот несколько способов не сойти с ума:

  • Используйте целые числа (считайте копейки вместо рублей).
  • Применяйте библиотеки вроде decimal.js для критичных расчётов.
  • Для сравнений используйте эпсилон (порог погрешности).
  • Или просто смиритесь и округляйте до нужного знака.

Разработчики, столкнувшиеся с этой проблемой в CI или при оплате, знают: лучше потратить час на изучение IEEE 754, чем потом искать баг в ночном деплое.

Комментарий студии METABYTE: Мы тоже любим, когда числа ведут себя предсказуемо — особенно в финансовых приложениях. Если ваши float-ы начали бунтовать, позовите нас: мы укротим их с помощью правильных библиотек и строгих тестов.

Float с собственной тенью: числа с плавающей точкой не согласны даже сами с собой | METABYTE — METABYTE