Я пытаюсь преобразовать строковое значение в NSNumber с ниже код, который хранится в базе данных CoreData:Преобразование NSString в NSNumber
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSLog(@"OrigLoc: '%@', OrigLat '%@'", [item objectForKey: @"origLocHorizontal"], [item objectForKey: @"originLatitude"]);
[tour setOriginLatitude: [f numberFromString:[item objectForKey: @"originLatitude"]]];
[tour setOriginLongitude: [f numberFromString:[item objectForKey: @"originLongitude"]]];
[tour setOrigLocHorizontal: [f numberFromString:[item objectForKey: @"origLocHorizontal"]]];
[tour setOrigLocVertical: [f numberFromString:[item objectForKey: @"origLocVertical"]]];
Результат NSLog является: «OrigLoc:" 206.195 ', OrigLat '41 .824989318847656' "
Дамп на iPhone 6« тура »дает:« origLocHorizontal = «206.195»; Дамп на iPhone 5 дает: origLocHorizontal = 206195;
(обратите внимание на разницу «ххх»)
Это прекрасно работает для «двойного» поля в CoreData, но не для «поплавок». Значение 25,5 сохраняется вместо 25500. Это похоже на не 64-битные iOS-устройства, хотя это может быть просто совпадением с реальной проблемой.
У кого-нибудь есть предложения по поводу этой проблемы?
Возможно, проблема локали? '.' обычно используется в качестве разделителя тысяч (в отличие от разделителя десятичных чисел, который является запятой) в большинстве неанглоязычных стран. –
@ TheParamagneticCroissant Но эти локали используют одно и то же соглашение для 'double' и' float'. – trojanfoe
Сначала мы думали, что это запятая и полная остановка, так как это еще одна разница между устройствами. Но он не объясняет, почему он работает для одного значения, а не для другого. –