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 货币输入栏的主要内容,如果未能解决你的问题,请参考以下文章

php whmcs隐藏货币客户侧边栏

在多种货币之间切换时,Magento Enterprise 整页缓存(FPC)购物车侧边栏问题

如何将输出格式化为 UILabel 作为货币?

在输入掩码货币中更改货币符号或将其删除

用于货币/货币的 html5 输入

如何让 iOS 中的用户可以选择自己的货币