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

我正在努力比较我的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) 

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

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

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


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

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