Строка, чтобы плавать в цели c - PullRequest
5 голосов
/ 28 января 2011

У меня есть синтаксический анализатор, возвращающий некоторое строковое значение, которое я хотел бы использовать в качестве параметра для моей инициализации экземпляра класса.

У меня есть метод, запрашивающий два NSString и значение с плавающей точкой, но я не могу преобразовать строку в плавающее, вот мой код:

 NSString *from = [[NSString alloc] initWithString:@"EUR"];
    NSString *to = [[NSString alloc] initWithString:[attributeDict objectForKey:@"currency"]];
    NSNumber *rate = [[NSNumber alloc] initWithFloat:[[attributeDict objectForKey:@"rate"] doubleValue]];


   currency = [[Currency init] alloc];
   [currency addCurrencyWithFrom:from andTo:to andRate:rate];

в .ч

- (id) addCurrencyWithFrom: (NSString *) from_ andTo:(NSString *) to_ andRate:(float *) float_;

Ответы [ 3 ]

18 голосов
/ 28 января 2011

Нет, нет, нет, нет, нет, нет, нет, нет.

Используйте NSNumberFormatter. Вот почему он существует .-floatValue и -doubleValue - это просто быстрые и простые временные исправления, но они плохо работают.Например:

NSLog(@"%f", [@"123" floatValue]); //logs 123.0000
NSLog(@"%f", [@"abc" floatValue]); //logs 0.0000
NSLog(@"%f", [@"0" floatValue]);   //logs 0.0000
NSLog(@"%f", [@"42" floatValue]);  //logs 42.0000
NSLog(@"%f", [@"42x" floatValue]); //logs 42.0000

-floatValue не может отличить правильное число (@"0") от неправильного (@"abc").

NSNumberFormatter наС другой стороны, вы получите nil, если не сможете разобрать его, и NSNumber, если сможете.Он также принимает во внимание такие вещи, как символы валюты, десятичный разделитель для региона и разделитель тысяч, а также языковой стандарт пользователя.-floatValue, а друзья нет.

См. Этот вопрос для получения дополнительной информации: Как преобразовать строку NSString в номер NSN

7 голосов
/ 28 января 2011
float f = [yourStringObject floatValue];
1 голос
/ 28 января 2011

Попробуйте:

double f = [from_ doubleValue];
double t = [to_ doubleValue];

Кроме того, передача NSNumber * вместо числа с плавающей запятой не даст ожидаемых результатов.

...