Команда OK, это странно. [NSDecimalNumber integerValue] ведет себя странно.
Я сижу в точке останова, пытаясь понять, почему некоторые части моего приложения разбиты на iOS8, и я смотрю на переменную, называемую "timeSeconds". Это похоже на это в представлении переменных Xcode:
_timeSeconds (NSDecimalNumber *) 344.514533996581994496
Но когда я запрашиваю его в отладчике, я вижу следующее:
(lldb) p [self.timeSeconds doubleValue]
(double) $14 = 344.51453399658192
(lldb) p [self.timeSeconds intValue]
(int) $15 = 344
(lldb) p [self.timeSeconds integerValue]
(NSInteger) $16 = -5
(lldb) p (NSInteger)[self.timeSeconds intValue]
(NSInteger) $17 = 344
Посмотрите, что "-5"? Может ли кто-нибудь из вас прекрасных людей воспроизвести или объяснить это, прежде чем я отправлю радар?
Здесь SSCCE:
NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"344.514533996581994496"];
NSLog(@"%@", n); // 344.514533996581994496
NSLog(@"%ld", (long)[n intValue]); // 344
NSLog(@"%ld", (long)[n integerValue]); // -5
NSLog(@"%ld", (long)[n unsignedIntegerValue]); // 12
Спасибо заранее!
Мэтью