NSPredicate用于搜索小数

时间:2014-12-15 09:35:40

标签: core-data swift nspredicate

我正在尝试构建搜索功能,用户可以搜索' 10'并返回包含交易金额为' 10'的结果,显然是..

采用以下数据集:

  

10.35   70.51   64.02

使用以下谓词语句:

  

transaction.amount CONTAINS [cd] 10

所有上述交易都会被退回,因为它们都包含' 1'' 0'或者两者兼而有之,我只想要包含' 10'顺序。

我尝试了许多不同的方法,包括使值字段为字符串,十进制和双精度。

有谁知道如何使用NSPredicate来做到这一点?我宁愿不下去拉下所有记录,然后使用正则表达式或类似的东西。

干杯

1 个答案:

答案 0 :(得分:1)

使用NSString

如果您将金额存储为字符串,我觉得有点奇怪,以下工作正如您所愿:

NSArray *decimals = @[@"10.35", @"70.51", @"64.02", @"11.10"];
NSLog(@"Decimals: %@", decimals);
NSArray *tens = [decimals filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] '10'"]];
NSLog(@"Tens: %@", tens);

提供以下输出:

Decimals: (
    "10.35",
    "70.51",
    "64.02",
    "11.10"
)
Tens: (
    "10.35",
    "11.10"
)

使用NSNumber

如果您想将金额保留为数字,则可以执行以下操作:滥用description的{​​{1}}:

NSNumber

提供以下输出:

NSArray *decimals = @[@(10.35), @(70.51), @(64.02), @(11.10)];
NSLog(@"Decimals: %@", decimals);
NSArray *tens = [decimals filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF.description CONTAINS[cd] '10'"]];
NSLog(@"Tens: %@", tens);

正如您在输出中看到的那样,它没有为您提供所需的结果,因此可以在您的事务Decimals: ( "10.35", "70.51000000000001", "64.02", "11.1" ) Tens: ( "10.35", "70.51000000000001" ) 上实现一个getter,如:

NSManagedObject

你的谓词就像是:

- (NSString *)amountSearch {
    return [NSString stringWithFormat:@"%.2f", self.amount.doubleValue];
}