objective-c - Objective C 中的无效 float 比较

标签 objective-c ios math comparison

我有一个奇怪的困境,我似乎无法解决这个问题,并且在试图找出问题时需要一些外部帮助。我有一个从文本框中读入的 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/

相关文章:

objective-c - 从 'struct myStruct *' 分配给 'struct myStruct *' 的不兼容指针类型

objective-c - 支持1词频的标签云算法

iphone - NSData writeToFile 适用于模拟器但不适用于设备

python - 找到python中分数列表的最小公分母

java - 如何将jar文件包含到iphone应用程序中

ios - 从 UIView 层次结构创建 UIImage 时背景透明度丢失

ios - 应用程序崩溃显示 "UITableView was deallocated while key value observers were still registered with it"

ios - 如何获取定位服务的准确授权状态?

math - 对数刻度

javascript - 如何在提供迭代次数的同时获取两个数字之间的值范围?