Objective c NSDecimalFormatter和货币符号:$US而不是$
我肯定错过了一些明显的东西,但由于我在这方面浪费了太多时间,我会让专家们看看。我只是想得到一个字符串的格式完全符合我的要求,但货币符号给了我一个问题:当我只需要符号时,它使用了某种国际代码Objective c NSDecimalFormatter和货币符号:$US而不是$,objective-c,ios,nsdecimalnumber,Objective C,Ios,Nsdecimalnumber,我肯定错过了一些明显的东西,但由于我在这方面浪费了太多时间,我会让专家们看看。我只是想得到一个字符串的格式完全符合我的要求,但货币符号给了我一个问题:当我只需要符号时,它使用了某种国际代码 NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease]; [formatter setNumberStyle:NSNumberFormatterDecimalStyle]; [formatter setCurr
NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setCurrencyCode:currencyCode];
[formatter setPositiveFormat:@"#,##0.00 ¤"];
[formatter setNegativeFormat:@"-#,##0.00 ¤"];
这导致:$US1250.56,而不是$1250.56
我不会设置区域设置,因为我只有一个符号:EUR/USD/GBP等。试试NSNumberFormatterCurrencyStyle 这个简单的代码:
NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[currencyFormatter setCurrencyCode:currencyCode];
NSString *formatted = [currencyFormatter stringFromNumber:[NSDecimalNumber decimalNumberWithString:@"1250.56"]];
NSLog(@"%@", formatted);
产出:
2011-10-26 19:18:49.141 Craplet[8716:707] $1,250.56
也就是说,我不能指责你的问题。如果我使用十进制样式,那么正和负显式格式都可以:
// ...
[currencyFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
// ...
[currencyFormatter setPositiveFormat:@"#,##0.00 ¤"];
[currencyFormatter setNegativeFormat:@"-#,##0.00 ¤"];
2011-10-26 19:29:28.943 Craplet[9458:707] 1,250.56 $
2011-10-26 19:29:28.949 Craplet[9458:707] -1,250.56 $
如果您想要一个美元符号和一个美元符号,为什么不直接指定一个像
'$,##0.00'
这样的格式,并使用一个文本$
?或者,指定一个区域设置,该区域设置将按默认方式格式化金额
指定NSNumberFormatterCurrencyStyle
只是设置语言环境的标准货币格式的一种快捷方式,它将包括符号是作为金额的前缀还是后缀,但与您的操作几乎没有关系,因为您是手动指定格式的
您看到的是US$,因为它为您所在地区的美元设置了适当的格式。(虽然您一定是混淆了格式字符串和输出,因为它确实尊重您是否请求货币代码的前缀或后缀位置。)但darvids0n基本上是正确的:
- 格式字符串中的一个货币符号放置该货币的区域设置符号,在英语中为“$”,在许多其他语言中为“<代码>美元”李>
- 两个地方的国际符号,如“美元”李>
- 该货币的区域设置显示名称有三个位置,如“美元”
(语法是的。)是的,我可以这样做,但不幸的是,这对其他货币不起作用。要重新编程,许多说英语的人必须设置格式化程序的区域。例如,使用
[formatter setLocale:[NSLocale localeWithLocaleIdentifier:@“sv_SE”]
,格式化程序将$1234.99格式化为“1234,99 US$”。我的救世主!如果我确实将区域设置改写为EN,我可以做我想做的事情:)
> nf := NSNumberFormatter alloc init
> nf setNumberStyle:NSNumberFormatterDecimalStyle
> amt := 1250.56
> nf setPositiveFormat:'¤ #,##0.00'
> nf stringFromNumber:amt
'US$ 1 250,56'
> nf setPositiveFormat:'#,##0.00 ¤'
> nf stringFromNumber:amt
'1 250,56 US$'
> nf setPositiveFormat:'#,##0.00 ¤¤'
> nf stringFromNumber:amt
'1 250,56 USD'
> nf setPositiveFormat:'#,##0.00 ¤¤¤'
> nf stringFromNumber:amt
'1 250,56 US-dollar'