用户输入一个数字(浮点数或整数),并且必须大于下限。
这是从UITextField获取号码的代码:
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *currentNumber = [f numberFromString:self.textfield.text];
[f release];
下限通常为0.1(lowerBound
是NSNumber)
如果我有此代码并在文本字段中输入0.1,则isValid
仍为YES
。
BOOL isValid = YES;
if ([currentNumber floatValue] < [self.lowerBound floatValue]) {
isValid = NO;
}
但是我会做得更好:
BOOL isValid = YES;
if ([currentNumber compare:self.lowerBound] == NSOrderedAscending) {
isValid = NO;
}
但是我再次输入0.1(并且lowerBound仍为0.1)if语句的计算结果为true(就好像currentNumber小于self.lowerBound)。
代码按预期工作0.11及以上。我也有一个更高的界限:
BOOL isValid = YES;
if ([currentNumber compare:self.higherBound] == NSOrderDescending) {
isValid = NO;
}
这可以按预期工作,包括当我输入与highBound相同的值时(大多数情况下为10)
据我所知,NSNumber上的compare:
方法比较了值而不是对象的地址,为什么它不能在下界工作呢?
答案 0 :(得分:2)
因为浮点数不准确 - 一个NSNumber中的0.1可能与另一个NSNumber中的值不同。