我希望在我的应用中有一个货币输入字段,用户可以根据需要包含货币符号(适用于他们的区域设置)。
我有一个文本字段设置,我将值存储在NSDecimalNumber中(我理解这是存储货币的推荐方法)。
以下代码将使我从NSDecimalNumber转换为格式化的货币字符串:
[NSNumberFormatter localizedStringFromNumber:currencyValue numberStyle:NSNumberFormatterCurrencyStyle]
但是我无法找到一种方法来反过来。即,将用户键入的字符串带入我的文本字段,并将其(如果可能)转换为NSDecimalNumber。请记住货币符号可能在那里(因为它来自上面的函数)或不符合(因为用户没有打扰输入货币符号)。
我错过了什么?
如果我无法解决这个问题,我将根本不接受任何货币符号(即,只需使用下面的代码解析它)。但允许使用货币符号似乎更好。
[NSDecimalNumber decimalNumberWithString:currencyString locale:[NSLocale currentLocale]]
我感觉我错过了什么。在本地化货币字符串和NSDecimalNumber之间来回转换的正确方法是什么?
答案 0 :(得分:1)
如果你得到一个NSNumberFormatter的实例(而不是使用静态方法调用),你可以使用NSNumberFormatter的“stringFromNumber”方法格式化货币字符串,并使用“numberFromString”将该字符串解析回一个数字。
答案 1 :(得分: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:@""];
}