【发布时间】:2011-08-14 01:44:53
【问题描述】:
我有以下谓词可以很好地处理 555 和 623(3 位数字)等数字
问题是,我有 005 和 009 等数字(1 位前面有两个 0)。
NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"ANY code BETWEEN %@",
[NSArray arrayWithObjects:
[NSExpression expressionForConstantValue: [NSNumber numberWithFloat: [self.predicateFilter floatValue]]],
[NSExpression expressionForConstantValue: [NSNumber numberWithFloat: [self.predicateFilter floatValue] + .99]],
nil]];
大多数时候,predicateFilter 将是一个带有数字的字符串,例如@"124"。但是当我运行像 035 这样的数字时(注意开头的 0),我得到以下 NSLog:
2011-08-13 18:32:23.989 Codes[2007:707] code 004
2011-08-13 18:32:24.018 Codes[2007:707] ANY code BETWEEN {4, 4.99}
2011-08-13 18:34:23.846 Codes[2007:707] code 083
2011-08-13 18:34:23.864 Codes[2007:707] ANY code BETWEEN {83, 83.99}
因此,由于00X,它没有找到这些数字。
有没有办法我可以执行 if/else 或捕获所有以 0 或 00 开头的数字,以便我可以相应地编辑谓词?
编辑:
我想我只需要创建一个谓词,将code 的前 3 位数字与 NSString 相匹配,即 005。然后这会给我剩下的结果是 005.5、005.6 等。
【问题讨论】:
-
您要过滤的
code属性有什么类型? -
它是
string,但它是数字,而不是字母。基本上,现在的谓词没有找到任何以0或00开头的code。 -
前导零在数值表达式中没有意义。如果它们确实对您的代码有意义(004 != 4),您应该使用字符串。如果没有,请使用数字属性。
-
code已经是一个字符串。我需要将其保留为 005,因为这是一个预加载的数据库。我现在遇到的问题是谓词没有找到任何以 0 或 00 开头的代码 -
为什么不直接使用 predicateFilter 进行查询,而不是先将其转换为数字(删除前导零)?
标签: iphone objective-c nsstring nspredicate nsnumber