2013-09-10 10 views
1

Я хотел бы иметь поле ввода валюты в своем приложении, где пользователь может либо включать символ валюты (в зависимости от их локали), либо не по желанию.iOS Поле ввода валюты

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

Следующий код будет получить меня от NSDecimalNumber на отформатированную строку валюты:

[NSNumberFormatter localizedStringFromNumber:currencyValue numberStyle:NSNumberFormatterCurrencyStyle] 

Но я не могу найти способ сделать реверс этого. то есть взять строку, которую пользователь набрал в текстовое поле, и преобразовать ее (если возможно) в NSDecimalNumber. Имея в виду, что символ валюты может быть там (потому что он исходил из функции выше) или нет (потому что пользователь не стал набирать символ валюты).

Что мне не хватает?

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

[NSDecimalNumber decimalNumberWithString:currencyString locale:[NSLocale currentLocale]] 

У меня такое чувство, что у меня что-то не хватает. Каков правильный способ конвертировать назад и вперед между локализованной строкой валюты и NSDecimalNumber?

ответ

0

Если вы уверены, что символ валюты, если он существует, будет в начале строки, то вы можете просто использовать это (строка - это NSString, которую вводит пользователь, а число - это NSDecimalNumber, который представляет значение валюты)

NSDecimalNumber *number; 
if([string hasPrefix:@"0"] || [string hasPrefix:@"1"] || [string hasPrefix:@"2"] || [string hasPrefix:@"3"] || [string hasPrefix:@"4"] || [string hasPrefix:@"5"] || [string hasPrefix:@"6"] || [string hasPrefix:@"7"] || [string hasPrefix:@"8"] || [string hasPrefix:@"9"]) { 
    // The string does not contain a currency symbol in the beginning so we can just assign that to a NSDecimalNumber 
    number = [NSDecimalNumber decimalNumberWithString:string]; 
} 
else { 
    // The string contains a currency symbol at the beginning and we will assign the currency symbol to the currencySymbol variable 
    NSString *currencySymbol; 
    currencySymbol = [string substringWithRange:NSMakeRange(0,1)]; 
    number = [NSDecimalNumber decimalNumberWithString:[string stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:@""]; 
} 
1

Если вы получаете экземпляр NSNumberFormatter (вместо того, чтобы использовать статический вызов метода), вы можете использовать его метод NSNumberFormatter в «stringFromNumber» для форматирования строки валюты и использовать «numberFromString», чтобы разобрать, что верните строку в число.

https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/Classes/NSNumberFormatter_Class/Reference/Reference.html

0

Это должно сделать трюк:

NSNumberFormatter *currencyFormatter = [[NSNumberFormatter alloc] init]; 
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
[currencyFormatter setLenient:YES]; 

NSString* input = @"$3,456.78"; 
NSNumber *number = [currencyFormatter numberFromString:input]; 
NSDecimalNumber *price = [NSDecimalNumber decimalNumberWithDecimal:[number decimalValue]]; 
Смежные вопросы