Сравнение NSNumber: возвращаются разные результаты

Я пытаюсь сравнить числа и получаю странные результаты.

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");

Вывод журнала:

NO
ДА
НЕТ
ДА

Это меня очень расстраивает. Я знаю, что это, вероятно, связано с разницей между количеством битов в float по сравнению с двойным. Мне кажется, это усечение двойного до числа с плавающей запятой для сравнения. Но если я не знаю, как создается число, как мне получить правильные результаты? Есть ли другой способ сравнить NSNumber?

7
задан Dan J 9 February 2012 в 23:45
поделиться