无法比较两个CLLocationCoordinate2Ds(负零??)

时间:2013-08-13 04:19:22

标签: c floating-point core-location cllocationcoordinate2d

我正在努力比较我的iOS应用中的两个(应该是相同的)CLLocationCoordinate2D结构。出于某种原因,无论我如何比较它们,纬度都不会说它是平等的。

代码:

double dlat = self.mapView.centerCoordinate.latitude - self.centerOnNextView.coordinate.latitude;
double dlong = self.mapView.centerCoordinate.longitude - self.centerOnNextView.coordinate.longitude;
NSLog(@"dlat: %f dlong: %f, dlat == 0.0: %d, dlat == -0.0: %d, dlong == 0.0: %d, dlong == -0.0: %d",
    dlat, dlong, dlat == 0.0, dlat == -0.0, dlong == 0.0, dlong == -0.0);
if ( ( dlat == 0.0 || dlat == -0.0 ) && ( dlong == 0.0 || dlong == -0.0 ) ) {
    NSLog(@"WE ARE EQUAL!");
}

我甚至尝试if ( [@(dlat) isEqualToNumber:@(0)] && [@(dlong) isEqualToNumber:@(0)] )作为比较检查,但也失败了。

这是输出:

dlat: -0.000000
dlong: 0.000000
dlat == 0.0: 0 (false)
dlat == -0.0: 0 (false)
dlong == 0.0: 1 (true)
dlong == -0.0: 1 (true)

出于某种原因,我只是继续在那里得到负零,没有什么可以与它相比。我能做些什么来比较这些东西?!

1 个答案:

答案 0 :(得分:3)

dlat的值不是0.0。打印时使用%e 而不是%f来查看差异。

dlat == 0.0中的数字与0.0进行比较会得到与dlat == -0.0相同的结果。无需进行两种比较。


更多关于-0
0.0和-0.0具有相同的数值值,并且在六个比较运算符> =,>,==,!=,<,< =中相互比较。

如果一个必须区分零,则可以使用int signbit()memcmp()。存在许多方法。