Робота з даними у форматі Float (числа з плаваючою комою) мають неприємну специфіку, яка прийшла ще з минулого... століття. З минулого тисячоліття. Дуже пафосно, але так: проблема ще з 8-бітних комп'ютерів.
Не будемо вдаватись в історію, технічну реалізацію, а розглянемо приклади і методи як жити в таких умовах.
І щоб ви не подумали, що це проблема Python, наведу приклад з JavaScript
Ну і приклади як це заважає нам жити:
Ну і якщо ви думаєте, що сюрпризи закінчились, то ось вам
Ну не буду вас більше лякати і розкажу як в оду ці проблеми вирішуються. А вирішуються прямо в класі fields.Float
По-перше, є функція round, яка округлює математично, але трохи бажно
тобто потребує певних милиць
По-друге, порівняння з нулем первої точності. Функція is_zero. Потрібно, наприклад, як будемо округлювати до копійок або до 10 копійок, як зараз прийнято. Як хтось не зрозумів: вона порівнює з нулем не вхідне значення, а його округлений результат
По-третє, порівняння двох чисел у заданій точності. Функція порівнює числа у заданій точності і повертає значення
-1 - перше число менше
0 - числа рівні
1 - перше число більше