Номер 349012345667812124 имеет 18 десятичных цифр.формат double
обеспечивает лишь немногим менее 16 десятичных цифр точности (фактическое число не является целым числом, поскольку двоичные цифры формата не соответствуют непосредственно десятичным).Таким образом, совершенно ожидаемо, что последние 2 или 3 цифры не могут быть представлены точно, и это уже происходит, когда литерал "349012345667812124" анализируется в формате double
, прежде чем произойдут какие-либо вычисления.
Тот факт, чтовы получите ожидаемый результат с числом 34901234566781212, ничего не значит;просто оно достаточно близко к ближайшему значению, которое может представлять формат double
.
Чтобы избежать этой проблемы, используйте типы NSDecimal
или NSDecimalNumber
.