1

我有一组对象,其中一个属性是浮点值,例如 36.6 或 19.9。给定一个诸如 34.6 之类的值,我将如何设计一个谓词来仅获取那些其 NSNumber 浮点值此属性四舍五入为 34.6 的对象?

通常我会做这样的测试:

if(value - test <= .01 && test - value <= .01) { //they match }

但是你将如何在谓词中做到这一点?谓词似乎没有能力在自身内部进行基本算术运算,或者测试两个浮点值是否相等,对吗?尝试查看两个浮点值是否相同不是很糟糕吗?或者谓词搜索是否知道它正在比较两个浮点数并且只以合理的精度进行比较?

4

1 回答 1

3

这应该有效:

float test = 34.6;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"value >= %f AND value <= %f",
    test - 0.01, test + 0.01];

更新:实际上你可以在核心数据谓词中做一些算术。以下谓词也有效:

[NSPredicate predicateWithFormat:@"abs(value - %f) < 0.01", test];

根据http://www.sqlite.org/datatype3.html,所有实数都存储为 SQLite 数据库中的 8 字节 IEEE 浮点数。因此,像 36.6 或 19.9 这样的数字无法准确存储,并且与一些容差(可能小于 0.01)进行比较是正确的方法。

于 2013-10-31T18:04:52.847 回答