Приведение NSNumber к double

Рейтинг: 0Ответов: 1Опубликовано: 20.03.2015

При переводе из NSNumber в double число из 2.3 превращается в 2.2999999998 double accum = [self.accumulator doubleValue];

Обратно такая фишка не работает. Будет выводить 2.299999998

Тут можно как-то без костылей обойтись или нет? Заранее спасибо за ответ.

Ответы

▲ 1

При переводе из NSNumber в double число из 2.3 превращается в 2.2999999998

Здесь дело не в переводе, а в невозможности точного предоставления некоторых десятичных дробей в двоичном виде.

Тут можно как-то без костылей обойтись или нет?

Используйте NSDecimalNumber. NSDecimalNumber наследник NSNumber'а, но он хранит мантиссу и экспоненту раздельно в целочисленных переменных: мантиссу в переменной типа int, а экспоненту в переменной типа short.

NSNumber *number = [NSDecimalNumber decimalNumberWithMantissa:23 exponent:-1 isNegative:NO];

Ни в коем случае не приводите number к float или double (т.е. не используйте doubleValue и floatValue), иначе потеряете точность.