我是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对象,这样的事情怎么会发生?我通过在屏幕上找到精灵之间的距离来获得这两个数字。
真的很感激任何线索或建议
答案 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
}