更改货币格式的默认区域设置行为

时间:2011-06-11 16:11:11

标签: ios concurrency nsnumberformatter

我面临一个奇怪的问题。我的应用程序依赖于双重转换:

  

货币字符串 - >号码 - >货币字符串

基本上,单次转换是通过iOS的内置本地化功能实现的。我最近发现,当用户使用CHF作为货币时,该应用程序无法正常工作。显然,此区域设置的默认值是将所有货币值四舍五入到最接近的5美分。 (例如,瑞士法郎1.28将变为1.30瑞士法郎,1.21瑞士法郎将变为1.20瑞士法郎)。

由于一系列原因,我更容易解决格式约定,而不是仅解决该区域设置的错误。

您是否知道一种方法可以强制转换为每个区域设置使用更详细的舍入方法(例如0.01而不是0.05)?

谢谢!

1 个答案:

答案 0 :(得分:2)

我找到了一个有趣的解决方案:

currencyFormatter  = [[NSNumberFormatter alloc] init];
[currencyFormatter setGeneratesDecimalNumbers:YES];
[currencyFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
// This will force the rounding behavior:
[currencyFormatter setRoundingIncrement:[NSNumber numberWithFloat:0.01]];