Значение 22.8 не может быть представлено в бинарной плавающей запятой точно. То, что вы видите, - это представление, основанное на формате дисплея. Различные методы отображения могут использовать разные форматы отображения. Отображение различного количества цифр и округление означает, что как 22,8, так и 22,799999 являются правильными для количества цифр, отображаемых после округления. Обратите внимание, что 22.7999999 было отображено, а не 22,8000000, потому что следующая цифра была 2, поэтому отображаемое значение было закруглено.
Это зависит от базового зависимости, это то, что может быть точным в одном номере базы, возможно, не может быть точным в другой номере. В этом случае 22.8 в базе десятичных чисел не может быть точным в базе двоичных чисел.
По этой причине существует NSDecimal, и причина плавающей запятой не используется для денежных значений.
Это несколько эквивалентно отображению значения PI в Base Decimal, количество цифр бесконечно, поэтому для каждого дисплея кто -то решил, сколько цифр показывать. Интересно, что PI может быть представлен точно (но с пользой) в базе номеров PI. :-)
В случае float
а также double
Существует конечное количество цифр, которые могут быть представлены.