在我的iOS应用程序中,比较两个(应该是相同的)结构是最困难的。出于某种原因,不管我怎么比较它们,纬度都不会说是相等的。
代码:
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!");
}
我甚至尝试了
CLLocationCoordinate2D
作为比较检查,但也失败了。输出如下:
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
查看差异。
将数字与dlat == 0.0
中的0.0进行比较得到的结果与dlat == -0.0
相同。两者不必做比较。
有关-0的详细信息
0.0和-0.0具有相同的数值,并且在六个比较运算符>=,>,==,,中进行类似的比较!=, 如果必须区分零,可以使用int signbit()
或memcmp()
。存在许多方法。