Как сравнить двойники в Objective C? - PullRequest
0 голосов
/ 04 октября 2011

У меня есть следующий метод, который не работает. Я думаю, что сравниваю 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 ]

2 голосов
/ 04 октября 2011

Ваше сравнение должно работать. Компилятор преобразует целое число в число с плавающей запятой перед сравнением. Если вы хотите быть уверены, вы можете изменить его на:

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

Но ваша главная проблема, я думаю, в том, что вы сообщаете неправильные цифры. %d в строке формата указывает ему печатать целое число . Вы должны сказать ему выводить число с плавающей запятой:

* * 1010
1 голос
/ 04 октября 2011

Проблема не в сравнении.

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 голосов
/ 11 декабря 2013

В этом случае вам не нужно явно проверять широту / долготу, поскольку в MapKit есть метод, который делает это с вами. Попробуйте следующее:

if (!CLLocationCoordinate2DIsValid(coordinate)) {

    [NSException raise:@"Invalid coordinate values" format:@"Latitude: %f Longitude: %f", coordinate.latitude, coordinate.longitude];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...