NSString в CLLocationDegrees в NSString меняет значение

Я получаю широту и долготу от API JSON. Эти значения поступают в виде строк.

Я храню значение в CLLocationDegreesтаком виде:

CLLocationDegrees lat = [[coordinates objectForKey:@"lat"] doubleValue];
CLLocationDegrees lon = [[coordinates objectForKey:@"lat"] doubleValue];

Но когда я позже извлекаю значения из latand lonи помещаю их в an NSString, значение изменилось от того, что было предоставлено JSON. Изменение, как правило, только последние несколько цифр координаты, но этого достаточно, чтобы вызвать проблему.

NSString *latitude = [[NSNumber numberWithDouble:lat] stringValue];
NSString *longitude = [[NSNumber numberWithDouble:lon] stringValue];

В принципе, на данный момент, [coordinates objectForKey:@"lat"]не равно latitude.

Любые советы о том, как это исправить, будут оценены

1 ответ

  1. NSNumber stringValue собирается дать вам представление по умолчанию, которое обычно имеет только 5 десятичных знаков.

    Один из вариантов — использовать stringWithFormatи использовать формат, соответствующий данным, полученным от исходного JSON.

    NSString *latitude = [NSString stringWithFormat:@"%.7f", lat];
    

    Настройте спецификатор формата в соответствии с вашими точными потребностями.

    Также имейте в виду, что переход от исходной строки к a doubleможет привести к некоторой потере точности из-за характера представления чисел с плавающей точкой. Вы ничего не можете сделать с этим, кроме как сохранить ссылку на исходную строку, если это так важно.