我有以下失败的方法。我想我正在比较double和int,但确实知道最好的方法。
-(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;
}
答案 0 :(得分:2)
您的比较应该有效。编译器会在比较之前将整数转换为浮点数。如果您想确定可以将其更改为:
if (coordinate.latitude > -90.0 && coordinate.latitude< 90.0)
但我认为,您的主要问题是您报告错误的数字。格式字符串中的%d
告诉它打印整数。您需要告诉它输出一个浮点数:
[NSException raise:@"Invalid latitude value" format:@"Latitude of %f is invalid", coordinate.latitude];
答案 1 :(得分: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
并给出奇怪的结果。
答案 2 :(得分:0)
在这种情况下,您不需要显式检查lat / long,因为MapKit有一个方法可以执行此操作。请尝试以下方法:
if (!CLLocationCoordinate2DIsValid(coordinate)) {
[NSException raise:@"Invalid coordinate values" format:@"Latitude: %f Longitude: %f", coordinate.latitude, coordinate.longitude];
}