2013-04-19 3 views
2

У меня возникают проблемы с преобразованием NSNumber в строку и строку на NSNumber.NSNumber stringValue отличается от значения NSNumber

Вот проблема пример:

NSString *stringValue = @"9.2"; 
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
NSLog(@"stringvalue:%@",[[formatter numberFromString: stringValue] stringValue]); 

выход будет:

stringvalue:9.199999999999999 

Мне нужно, чтобы получить исходное значение, в котором, в примере, должен быть 9.2. Наоборот, когда исходная строка 9.4, выход по-прежнему 9.4. Вы не знаете, как восстановить исходное строковое значение без NSNumber что-нибудь об этом?

ответ

6

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

Если вам нужно вернуться к исходной строке, сохраните исходную строку в качестве своих данных и только конвертируйте ее в число, когда вам нужно выполнить расчет.

Возможно, вы захотите изучить NSDecimalNumber. Это может лучше соответствовать вашим потребностям.

NSString *numStr = @"9.2"; 
NSDecimalNumber *decNum = [NSDecimalNumber decimalNumberWithString:numStr]; 
NSString *newStr = [decNum stringValue]; 
NSLog(@"decNum = %@, newStr = %@", decNum, newStr); 

Это дает 9.2 для обоих значений.