1

我想在我的应用程序中有一个货币输入字段,用户可以在其中包含货币符号(根据他们的区域设置),也可以不包含,如他们所愿。

我设置了一个文本字段,并将值存储在 NSDecimalNumber 中(据我所知,这是存储货币的推荐方式)。

以下代码将使我从 NSDecimalNumber 转换为格式化的货币字符串:

[NSNumberFormatter localizedStringFromNumber:currencyValue numberStyle:NSNumberFormatterCurrencyStyle]

但我找不到相反的方法。即,获取用户在我的文本字段中键入的字符串并将其(如果可能)转换为 NSDecimalNumber。请记住,货币符号可能存在​​(因为它来自上面的函数)或不存在(因为用户没有费心输入货币符号)。

我错过了什么?

如果我无法弄清楚这一点,我将根本不接受任何货币符号(即,只需使用下面的代码对其进行解析)。但允许货币符号似乎更好。

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

我觉得我错过了一些东西。在本地化货币字符串和 NSDecimalNumber 之间来回转换的正确方法是什么?

4

2 回答 2

1

如果你得到一个 NSNumberFormatter 的实例(而不是使用静态方法调用),你可以使用 NSNumberFormatter 的“stringFromNumber”方法来格式化货币字符串并使用“numberFromString”将该字符串解析回一个数字。

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

于 2014-08-24T15:57:34.557 回答
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:@""];
}
于 2013-09-10T02:58:55.923 回答