Чому 0.1 + 0.2 не дорівнює 0.3, і до чого тут гроші
Нотатки

Чому 0.1 + 0.2 не дорівнює 0.3, і до чого тут гроші

Відкрий калькулятор у браузері чи консоль розробника, набери 0.1 + 0.2 і подивись на відповідь. Там буде не 0.3, а ось це:

0.1 + 0.2
> 0.30000000000000004

Це не помилка конкретної програми - так рахують майже всі комп'ютери у світі. І за цим хвостиком ...0004 ховається причина, чому до грошей у розробці ставляться з особливою обережністю.

Чому так

Ми рахуємо в десятковій системі, а комп'ютер - у двійковій, з нулів та одиниць. Деякі прості для нас дроби у двійковому записі нескінченні - точно як 1/3 у десятковій перетворюється на 0.3333... без кінця. Число 0.1 - саме таке: цілком у пам'ять воно не вміщається, і його зберігають трішки неточно, округлюючи до найближчого доступного значення. Додаєш два такі неточні числа - і крихітні похибки вилазять тим самим хвостом.

Аналогія проста: запиши 1/3 як 0.3333 і помнож на три. Отримаєш 0.9999, а не одиницю. Комп'ютер робить рівно те саме, лише у двійковій системі і з числами на кшталт 0.1.

До чого тут гроші

За однією операцією хвостик непомітний. Але уяви рахунок, де додаються тисячі цін, знижок і податків. Крихітні похибки накопичуються, і в якийсь момент підсумок розходиться з реальністю на копійку, потім на гривню. Для гри це неважливо, а для бухгалтерії, каси чи білінгу це вже "рахунок не сходиться" - і з'ясовувати, звідки взялася зайва копійка, боляче.

Як правильно

Гроші ми ніколи не тримаємо в дробових числах. Усередині системи сума живе або в цілих (наприклад, у копійках), або в спеціальному точному типі, який не округлює дорогою. А гарне 1 200,00 з'являється лише в найостанніший момент - на екрані, під час виводу.

Совет

Зберігай суму в цілих або в точному типі, форматуй тільки під час виводу. Тоді всі розрахунки лишаються точними, і рахунок сходиться копійка в копійку.

Із таких дрібниць і складається різниця між "начебто працює" і "працює правильно".

Олександр

Олександр

Fullstack-розробник з 8+ роками досвіду - від промислової автоматизації та роботи з обладнанням до електронного документообігу і чат-ботів. Зараз фокус на прикладному ШІ - від RAG-платформ для діалогових ботів до комп'ютерного зору.