Как использовать currencyStyle number в качестве двойного значения iphone

#iphone #objective-c #ios4 #localization #currency

#iPhone #objective-c #ios4 #локализация #Валюта

Вопрос:

У меня есть рупии с символом валюты в текстовом поле, например, 10 500,50 рупий, и я хочу использовать его при вычислении как 10500 * 5. Как я могу это использовать. когда я пытаюсь преобразовать его в двойное значение, оно возвращает 0.00. пожалуйста, предложите.

Спасибо

Ответ №1:

Если вы использовали NSNumberFormatter для форматирования текстовой строки, вы можете использовать тот же форматер для преобразования текстовой строки обратно в число.

 NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];

NSNumber *rupees = [NSNUmber numberWithFloat:10500.50];

NSString *formattedRupees = [formatter stringFromNumber:rupees];

NSNumber *rupeesFromString = [formatter numberFromString:formattedRupees];

[formatter release];
  

Если вы не используете NSNumberFormatter, вы могли бы попробовать использовать NSScanner для разбора строки вручную.

Комментарии:

1. Извините за поздний ответ. но я хочу преобразовать 10,500.00 в 10500,00. поэтому я могу использовать в вычислении. пожалуйста, предложите мне как можно скорее. спасибо

2. NSNumber * rupeesFromString = [formatter numberFromString:formattedRupees]; из приведенного выше.

Ответ №2:

Осторожно с числами с плавающей точкой!!

Использование NSNumber *rupees = [NSNUmber numberWithFloat:10500.50]; может вызвать проблемы с точностью преобразования. Число ‘10500,50f’ может сработать, но если вы попробуете что-то вроде 25,63f, это может произойти:

 rupees = 25.629999
  

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

Переходя к вашему вопросу:

вы можете сделать что-то вроде этого:

 NSString *string = @"Rs 10,500.50";
string = [string stringByReplacingOccurrencesOfString:@"," withString:@""];
string = [string stringByReplacingOccurrencesOfString:@"Rs " withString:@""];

NSArray *valueArray = [string componentsSeparatedByString:@"."];
NSInteger firstNumber = [[valueArray firstObject] intValue];
NSInteger secondNumber = [[valueArray lastObject] intValue];
  

И тогда вы можете использовать оба значения ( firstNumber и secondNumber )