Используемый тип float
хранит двоичные числа с плавающей запятой.Не каждое десятичное число точно представлено как float
.В частности, нет точного представления 1,2 или 0,01, поэтому фактическое число, хранящееся в компьютере, будет очень незначительно отличаться от значения, записанного в исходном коде.Эта ошибка представления может привести к тому, что вычисления будут давать немного отличающиеся результаты от точного математического результата.
Важно знать о возможности небольших ошибок, когда вы используете арифметику с плавающей запятой, и писать свой код для правильной работыкогда рассчитанные значения не совсем верны.Например, вы должны учитывать округление значений до определенного количества десятичных знаков при отображении их пользователю.
Вы также можете рассмотреть возможность использования типа decimal
, в котором хранится десятичное число числа с плавающей запятой.Если вы используете decimal
, то 1.2 может быть сохранено точно.Однако работа с decimal
снизит производительность вашего кода.Вы должны использовать его только в том случае, если важно точное представление десятичных чисел.Вы также должны знать, что decimal
не означает, что у вас никогда не будет проблем.Например, 0.33333 ... не имеет точного представления как decimal
.