在Objective C中比较NSNumbers

时间:2011-07-07 02:42:18

标签: objective-c nsnumber

我是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对象,这样的事情怎么会发生?我通过在屏幕上找到精灵之间的距离来获得这两个数字。

真的很感激任何线索或建议

4 个答案:

答案 0 :(得分:104)

我假设number1和number2是指向对象的指针。 &lt;标志正在比较指针。

您需要比较实际的floatValue或doubleValue

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

...

答案 1 :(得分:38)

对于您只想测试两个NSNumber属性是否包含相同值的情况,那么从Apple文档中可以看出使用

- (BOOL)isEqualToNumber:(NSNumber *)aNumber

是比较两个NSNumber值的最简单有效的方法。

例如:

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

文档还说&#34;这种方法比比较更有效:如果你知道这两个对象是数字。&#34;

每当您需要知道值是小于还是大时,它们都会提供

- (NSComparisonResult)compare:(NSNumber *)aNumber

方法,但我个人更喜欢在那一点上拉出整数值(或双值)并使用常规&lt;和&gt;运算符进行比较,因为这使得代码更容易阅读,如下所示:

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
}

在我看来,像这样的东西比调用-compare:更容易阅读。

埃里克

答案 2 :(得分:16)

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

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

答案 3 :(得分:0)

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

}