Я пытаюсь сделать некоторые сравнения чисел, и я получаю некоторые странные результаты.
NSNumber* number1 = [NSNumber numberWithFloat:1.004];
NSNumber* number2 = [NSNumber numberWithDouble:1.004];
([number1 compare:number2] == NSOrderedSame) ? NSLog(@"YES") : NSLog(@"NO");
([number1 compare:number2] == NSOrderedAscending) ? NSLog(@"YES") : NSLog(@"NO");
([number1 doubleValue] == [number2 doubleValue]) ? NSLog(@"YES") : NSLog(@"NO");
([number1 floatValue] == [number2 floatValue]) ? NSLog(@"YES") : NSLog(@"NO");
Вывод журнала:
НЕТ
ДА
НЕТ
ДА
Это очень расстраивает меня. Я знаю, что это, вероятно, потому, что разница между количеством битов в поплавке по сравнению с двойным. Мне кажется, что для сравнения он усекает двойное число до числа с плавающей запятой. Но если я не знаю, как создается число, как мне получить правильные результаты? Есть ли другой способ сравнить NSNumber?
[number1 isEqualToNumber:number2]
, это предпочтительный способ, по крайней мере, если вы пытаетесь только установить равенство значений? - person twilson   schedule 10.02.2012