我正在尝试进行一些数字比较,但结果很奇怪。
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]
是首选方式。 - twilson