我必须错过一些明显的东西,但由于我在这方面浪费了太多时间,我会让专家看一看。我只是愿意得到一个符合我想要的格式的字符串,但是货币符号给了我一个问题:当我只想要符号时,它正在使用某种国际代码。
NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setCurrencyCode:currencyCode];
[formatter setPositiveFormat:@"#,##0.00 ¤"];
[formatter setNegativeFormat:@"-#,##0.00 ¤"];
这导致: $ US 1,250.56而不是 $ 1,250.56
我不会设置区域设置,因为我只有一个符号:EUR / USD / GBP等。
答案 0 :(得分:5)
如果您想要一个美元符号和一个美元符号,为什么不只是指定'$#,##0.00'
这样的格式$
?或者,指定一个区域设置,默认情况下将按照您希望的方式格式化数量。
指定NSNumberFormatterCurrencyStyle
只是设置区域设置的标准货币格式的快捷方式,其中包括符号是以数字为前缀还是后缀,但与您正在做的事情关系不大,因为正在手动指定格式。
您看到US$
因为它正在为您所在的地区格式化货币USD。 (虽然你必须混淆你的格式字符串和输出,因为确实尊重你是否请求货币代码的前缀或后缀。)但是darvids0n大多是正确的:
US$
; 以下是使用瑞典语语言环境的此行为示例(默认情况下继承,未明确设置;这就是我的机器现在设置的内容):
> 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'
(语法是F-Script的语法。)
答案 1 :(得分:1)
尝试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 $
答案 2 :(得分:-1)
对于货币,数字样式应设置为NSNumberFormatterCurrencyStyle
。
编辑:根据@Jeremy W. Sherman的更正,您看到的$US
是某些(全部?)非美元的currencySymbol
en
区域设置,默认情况下应显示在CurrencyStyle
中。美元的internationalCurrencySymbol
为USD
,如果您按照Unicode tr35-10的格式提供两个货币字符,则只应显示国际货币符号。
我认为你只需要解析货币字符串并删除字母字符。当然,假设没有货币符号只是大写字母。