你如何在CoreData中创建一个谓词来搜索容差为.1的浮点数?

时间:2013-10-31 17:41:59

标签: core-data floating-point nspredicate nsfetchrequest

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

通常情况下我会做一个测试:

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

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

1 个答案:

答案 0 :(得分:3)

这应该有效:

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

更新:实际上可以在Core Data谓词中进行一些算术运算。下列 谓词也起作用:

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

根据http://www.sqlite.org/datatype3.html,所有实数都存储为 SQLite数据库中的8字节IEEE浮点数。因此数字就像 36.6或19.9不能准确存储,并与一些容差相比(可能更少 0.01)是正确的方法。