如何比较Objective C中的双打?

时间:2011-10-04 10:14:28

标签: objective-c xcode4

我有以下失败的方法。我想我正在比较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;
}

3 个答案:

答案 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];
}