我的应用程序使用货币值,我想用货币和格式来表示这些值,但用户在iPhone上设置时,在测试时,我似乎遇到了德国欧元格式的麻烦。使用NSLocale的NSDecimalNumber欧元格式的iPhone货币的错误?
我有一个方法从货币格式化字符串返回一个十进制数(用于存储在核心数据中)。该字符串实际上是由使用NSlocale的另一个(类似的)方法格式化的。
我已经测试了英国,美国,日本和德国的语言环境,到目前为止只有德国造成了任何问题。
下面的代码,被传递的字符串是例如:2,56€
+ (NSDecimalNumber*)TLCurrencyFormatFromString:(NSString*)strNumber {
NSNumberFormatter *fmtrCurrencyFromStr = nil;
fmtrCurrencyFromStr = [[NSNumberFormatter alloc] init];
[fmtrCurrencyFromStr setFormatterBehavior:NSNumberFormatterBehavior10_4];
[fmtrCurrencyFromStr setLocale:[NSLocale currentLocale]];
[fmtrCurrencyFromStr setNumberStyle:NSNumberFormatterCurrencyStyle];
[fmtrCurrencyFromStr setGeneratesDecimalNumbers:YES];
NSLog(@"Currency Separator: %@", [fmtrCurrencyFromStr decimalSeparator]); //prints a comma
NSLog(@"Currency Code: %@", [fmtrCurrencyFromStr currencyCode]); //prints EUR
int currencyScale = [fmtrCurrencyFromStr maximumFractionDigits];
NSDecimalNumberHandler *roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:currencyScale raiseOnExactness:FALSE raiseOnOverflow:TRUE raiseOnUnderflow:TRUE raiseOnDivideByZero:TRUE];
NSDecimalNumber* currencyNumber = [[NSDecimalNumber alloc] initWithDecimal:[[fmtrCurrencyFromStr numberFromString:strNumber] decimalValue]];
NSLog(@"Currency Number = %@", [currencyNumber decimalNumberByRoundingAccordingToBehavior:roundingBehavior]);
return [currencyNumber decimalNumberByRoundingAccordingToBehavior:roundingBehavior];
}
在 'currencyNumber' 变量被打印为:-18446912453607470532000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
而在所有其他地区,它将打印2.56作为NSDecimalNumber存储到Core Data中。