NSNumber и intValue: странное поведение - PullRequest
2 голосов
/ 26 января 2011

Я новичок в Obj-C, но сегодня я испытываю нечто, чего я действительно не могу понять самостоятельно с помощью NSNumber и intValue.

У меня есть этот пример кода:

    double quota = 203/100.0;    
    NSLog(@"%f %f %@ %d",
    quota,
    quota*100.0,
    [NSNumber numberWithDouble:(quota*100.0)],
    [ [NSNumber numberWithDouble:(quota*100.0)] intValue]
);

, который печатает вывод:

2.030000 203.000000 203 202

Пожалуйста, кто-нибудь может помочь мне понять, почему итоговое значение intValue превращает 203 в 202?Я чувствую, что упускаю что-то действительно очевидное и важное.

TIA

1 Ответ

4 голосов
/ 26 января 2011

Я запустил твой код и результат 203 / 100.0 = 2.0299999999999998, пока хранился как двойной.Похоже, что NSNumber, а% f округляет его до 2,03 при печати, но при получении значения int для 202.99999999999998 значение .99999999999998 удаляется.Надеюсь, кто-то (или я сам с правкой) может добавить, почему происходит такое поведение при округлении при печати двойного значения.

...