2

用户输入一个数字(浮点数或整数),它必须大于下限。

这是从 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;
}

这可以按预期工作,包括当我输入与 HigherBound 相同的值时(大多数情况下为 10)

据我了解,compare:NSNumber 上的方法比较的是值而不是对象的地址,那么为什么它不适用于下限呢?

4

1 回答 1

2

因为浮点数并不精确——一个 NSNumber 中的 0.1 可能与另一个 NSNumber 中的 0.1 不同。

于 2012-08-15T20:04:10.613 回答