比较目标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 }