【问题标题】:Change default locale behavior for currency formatting更改货币格式的默认区域设置行为
【发布时间】:2011-06-11 16:11:11
【问题描述】:

我遇到了一个奇怪的问题。我的应用依赖于双重转换:

货币字符串 -> 数字 -> 货币字符串

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

由于多种原因,我解决格式约定比解决该唯一语言环境的错误更容易。

您是否知道强制转换对每个语言环境使用更详细的舍入方法(例如 0.01 而不是 0.05)的方法?

谢谢!

【问题讨论】:

  • 既然没有答案,我只好接受我的...

标签: ios concurrency nsnumberformatter


【解决方案1】:

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

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]];

【讨论】:

  • 正是我想要的。谢谢!注意到了,如果你在设置舍入增量后设置货币代码,设置的舍入增量会根据设置的货币重置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 2020-01-24
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 2012-05-08
  • 1970-01-01
相关资源
最近更新 更多