2011-10-04 51 views
0

我有以下方法失败。我认为我正在比较double与int,但确实知道最好的方法。如何比较目标C中的双打?

-(BOOL)isValidCoordinate:(CLLocationCoordinate2D)coordinate 
{ 
    //Always fail first condition here. 
    if (coordinate.latitude > -90 && coordinate.latitude< 90) { 
     [NSException raise:@"Invalid latitude value" format:@"Latitude of %d is invalid", coordinate.latitude]; 
    } 

    if (coordinate.longitude > -180 && coordinate.longitude < 180) { 
     [NSException raise:@"Invalid longitude value" format:@"Longitude of %d is invalid", coordinate.longitude]; 
    } 

    [NSException raise:@"Invalid longitude value blash " format:@"Longitude of %d is invalid asd", coordinate.longitude]; 
    return TRUE; 
} 
+1

它是如何失败的? – Mark

+0

如果我的coordinate.latitude是-30.99986,那么它会使它大于-90的3099986并引发异常。 –

+0

好吧,你手动引发一个异常[NSException raise:@“无效的纬度值”格式:@“%d的纬度无效”,coordinate.latitude]; –

回答

2

你的比较应该可以工作。比较前,编译器会将整数转换为浮点数。如果你想确保你可以把它改成:

if (coordinate.latitude > -90.0 && coordinate.latitude< 90.0) 

但你的主要问题,我想,是你报告错了号码。 %d以格式字符串告诉它打印整数。你需要告诉它输出一个浮点数:

[NSException raise:@"Invalid latitude value" format:@"Latitude of %f is invalid", coordinate.latitude]; 
+0

感谢很多朋友简单的问题和人们给我跑:)这完全正确。 –

1

问题不在于比较。

if (coordinate.latitude > -90 && coordinate.latitude < 90) 
    [NSException raise:@"Invalid latitude value" 
       format:@"Latitude of %d is invalid", coordinate.latitude]; 

这段代码的逻辑应该筹集-30.99986一个例外,因为它是-90和90之间的问题是%d您使用格式化的错误信息,认为它的参数作为int并给你奇怪的结果。

+0

非常感谢+1接受了其他,但你也是对的。真诚地欣赏你的时间。 –

0

在这种情况下,您不需要纬度/检查长明确,因为MapKit有这样对你的方法。请尝试以下操作:

if (!CLLocationCoordinate2DIsValid(coordinate)) { 

    [NSException raise:@"Invalid coordinate values" format:@"Latitude: %f Longitude: %f", coordinate.latitude, coordinate.longitude]; 
}