objective-c - NSNumberFormatter 错误结果

标签 objective-c nsnumberformatter

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[numberFormatter setLocale:product.priceLocale];
NSString *localizedMoneyString = [numberFormatter stringFromNumber:product.price];
[numberFormatter release];

结果:0.89 欧元 预期结果:0,89€

无论setFormatterBehavior值如何,结果都是相同的。

最佳答案

是什么让您认为这个结果是错误的?

货币指示器的位置和符号不仅取决于货币,还取决于区域设置。

我举一个例子,我们有货币代码EUR(欧元)。 现在尝试将区域设置设置为 en_US(英语、美国)和 cs_CZ(捷克语、捷克共和国)来设置金额格式。您将分别获得 €0.890,89€

即使符号也可以改变,让我们尝试使用货币代码 CZK(捷克克朗) - 您会得到 分别为0.89捷克克朗0,89 Kc

考虑到区域设置和货币代码,您的结果可能是绝对正确的。

编辑:

NSLocale* locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_BG"] autorelease];
NSLog(@"%@", [locale objectForKey:NSLocaleCurrencyCode]);
NSLog(@"%@", [locale objectForKey:NSLocaleDecimalSeparator]);

输出:

BGN
.

如您所见,区域设置已正确初始化,区域设置为保加利亚(本地货币代码为 BGN),语言设置为英语(小数分隔符是一个点)。请注意,数字格式不是从区域设置的。它是由语言设置的。

所以,问题不在于 NSNumberFormatter 结果,问题在于你的期望,这是错误的。

关于objective-c - NSNumberFormatter 错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15201050/

相关文章:

ios - 从图像中获取子图像

c++ - 从 C++ 应用程序打开 Objective-C 窗口

ios - UITextfield 验证 1 - 100 之间的国家/地区货币

objective-c - NSNumberFormatter 只允许 4 位数字

localization - 使用环境语言环境时的 SwiftUI 预览问题

iphone - 是什么导致内存泄漏?

ios - 变量改变值时调用方法

iphone - 格式化 iPhone 文本字段中输入的数字

iphone - NSNumberFormatter 将 1,000,000 显示为 100 万等

ios - 将 API 用于磁刷,但设备无法打开