iOS 货币输入栏
Posted
技术标签:
【中文标题】iOS 货币输入栏【英文标题】:iOS Currency input field 【发布时间】:2013-09-10 02:14:20 【问题描述】:我想在我的应用程序中有一个货币输入字段,用户可以在其中包含货币符号(根据他们的区域设置),也可以不包含。
我设置了一个文本字段,并将值存储在 NSDecimalNumber 中(据我所知,这是存储货币的推荐方式)。
以下代码会将我从 NSDecimalNumber 转换为格式化的货币字符串:
[NSNumberFormatter localizedStringFromNumber:currencyValue numberStyle:NSNumberFormatterCurrencyStyle]
但我找不到相反的方法。即,获取用户在我的文本字段中输入的字符串并将其(如果可能)转换为 NSDecimalNumber。请记住,货币符号可能存在(因为它来自上面的函数)或不存在(因为用户没有费心输入货币符号)。
我错过了什么?
如果我无法弄清楚这一点,我将根本不接受任何货币符号(即,只需使用下面的代码对其进行解析)。但最好允许使用货币符号。
[NSDecimalNumber decimalNumberWithString:currencyString locale:[NSLocale currentLocale]]
我觉得我错过了什么。在本地化货币字符串和 NSDecimalNumber 之间来回转换的正确方法是什么?
【问题讨论】:
【参考方案1】:如果您获得 NSNumberFormatter 的实例(而不是使用静态方法调用),您可以使用 NSNumberFormatter 的“stringFromNumber”方法来格式化货币字符串并使用“numberFromString”将该字符串解析回一个数字。
https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/Classes/NSNumberFormatter_Class/Reference/Reference.html
【讨论】:
【参考方案2】:如果您确定货币符号(如果存在)将位于字符串的开头,那么您可以只使用它(字符串是用户输入的 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:@""];
【讨论】:
以上是关于iOS 货币输入栏的主要内容,如果未能解决你的问题,请参考以下文章