我的托管对象有2个双字段:"纬度","经度".我需要获取具有特定坐标的所有对象
此代码不起作用,fetchedObjects count = 0
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"latitude == %f AND longitude == %f", coordinate.latitude, coordinate.longitude];
Run Code Online (Sandbox Code Playgroud)
但是这段代码工作正常,fetchedObjects count = 3:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"latitude == 53.012667 AND longitude == 36.113000"];
Run Code Online (Sandbox Code Playgroud)
abu*_*sky 33
它适用于long float,%lf
小智 15
哦,天啊......
不要==
用来比较浮点值.
如果要查找具有"特定"值的对象,请与较小范围进行比较.否则,浮点表示错误会咬你.
所以考虑使用:
const float epsilon = 0.000001;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"latitude > %f AND latitude < %f AND longitude > %f AND longitude < %f", coordinate.latitude - epsilon, coordinate.latitude + epsilon, coordinate.longitude - epsilon, coordinate.longitude + epsilon];
Run Code Online (Sandbox Code Playgroud)