我有一个奇怪的困境,我似乎无法解决这个问题,并且在试图找出问题时需要一些外部帮助。我有一个从文本框中读入的 NSString 值,并将其转换为 NSNumber。这很好用,我得到了我的值(value)。然后我拿我的新数字,我想将它与一个由 4 个 float 组成的数组进行比较。然而,当我尝试比较时,我从来没有得到正确的结果,这就是我拔头发的地方。下面是一小段代码,解释了我的情况:
// THE FIRST IF STATEMENT IS WHAT GETS SELECTED
// newValue = 0.93
// colorRange = {0.10, 0.20, 0.80, 0.90 }
NSNumberFormatter *format = [[NSNumberFormatter alloc] init];
[format setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *newValue = [format numberFromString:value];
[format release];
if (newValue < [colorRange objectAtIndex:0]) {
// Red background
selectedButton.backgroundColor = [UIColor redColor];
}
else if (newValue > [colorRange objectAtIndex:0] && newValue < [colorRange objectAtIndex:1]) {
// White background
selectedButton.backgroundColor = [UIColor whiteColor];
}
else if (newValue > [colorRange objectAtIndex:1] && newValue < [colorRange objectAtIndex:2]) {
// Black background
selectedButton.backgroundColor = [UIColor blackColor];
}
else if (newValue > [colorRange objectAtIndex:2] && newValue < [colorRange objectAtIndex:3]) {
// Blue background
selectedButton.backgroundColor = [UIColor blueColor];
}
else {
// Green background
selectedButton.backgroundColor = [UIColor greenColor];
}
我想做的是查看我的输入值在我的百分比范围内的哪个位置,并根据该信息选择一种颜色。如果有更优化的方法,请告诉我。
最佳答案
你不能像那样直接比较 NSNumber,因为你是在比较它们的指针的值。相反,使用 NSNumber 的 compare
方法来比较它们:
if ([newValue compare:[colorRange objectAtIndex:0]] == NSOrderedAscending) {
// Red background
selectedButton.backgroundColor = [UIColor redColor];
}
...
关于objective-c - Objective C 中的无效 float 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12629303/