Я пытаюсь выполнить некоторые сравнения чисел, и у меня возникают некоторые странные результаты.NSNumber compare: возвращает разные результаты
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");
Выход Вход:
НЕТ
ДА
НЕТ
ДА
Это очень расстраивает меня. Я знаю, это, вероятно, потому, что разница между количеством бит в поплавке по сравнению с двойным. Мне кажется, что он обрезает двойную до float, чтобы сравнить. Но если я не знаю, как создается число, как мне получить правильные результаты? Есть ли другой способ сравнить NSNumber?
Что если вы используете '[number1 isEqualToNumber: number2] ', это предпочтительный способ, по крайней мере, если вы только пытаетесь установить равенство ценностей? – twilson
Извините twilson, который все еще возвращает NO. Цифры различны. – picciano