比较目标C中的NSNumbers

我是Obj-C的初学者,在这种情况下我有点困惑,我有下面的代码:

if (number1 < number2) { NSLog(@"THE FOLLOWING NUMBER "); NSLog(@"%@", number1); NSLog(@"IS LESS THAN"); NSLog(@"%@", number2); } 

当我运行这个代码时,我看到了如下奇怪的结果:

 2011-07-06 20:38:18.044 helloworld[1014:207] THE FOLLOWING NUMBER 2011-07-06 20:38:18.047 helloworld[1014:207] 190.8776 2011-07-06 20:38:18.050 helloworld[1014:207] IS LESS THAN 2011-07-06 20:38:18.053 helloworld[1014:207] 96.75866 

这两个数字都是NSNumber对象,怎么会这样呢? 我通过在屏幕上查找精灵之间的距离来得到这两个数字。

任何线索或build议真的会被赞赏

我假设number1和number2是指向对象的指针。 <符号比较指针。

您需要比较实际的floatValue或doubleValue

 if ([number1 doubleValue] < [number2 doubleValue]) 

….

对于你只是想testing两个NSNumber属性是否保持相同值的情况 ,那么从Apple文档看来似乎是这样

 - (BOOL)isEqualToNumber:(NSNumber *)aNumber 

是比较两个NSNumber值最直接,最有效的方法。

例如:

 if ([someNumber isEqualToNumber:someOtherNumber]) { // The numbers hold the same value } else { // The numbers hold different values } 

该文件还说:“这种方法比比较更有效率:如果你知道这两个对象是数字。

无论何时你需要知道一个值是小还是大,他们都会提供

 - (NSComparisonResult)compare:(NSNumber *)aNumber 

方法,但个人而言,我宁愿在这一点上拉出整数值(或双值),并使用常规的<和>运算符进行比较,因为这使得代码更容易阅读,如下所示:

 if (firstNumber.intValue > secondNumber.intValue) { // First number is greater than the second number } else if (firstNumber.intValue == secondNumber.intValue) { // The two numbers have the same value } else { // The first number is smaller than the second number } 

在我看来,类似这样的事情比调用比较容易得多。

埃里克

NSNumber有一个比较方法: – (NSComparisonResult)比较:(NSNumber *)aNumber

 if([numberOne compare:numberTwo] == NSOrderedSame) { // proceed } 

Swift 3.1

 let number1 = NSNumber(value: 10.2) let number2 = NSNumber(value: 20.2) let result = number1.compare(number2) if result == .orderedAscending { } else if result == .orderedDescending { } else { // .orderedSame }