4

我一定遗漏了一些明显的东西,但由于我在这方面浪费了太多时间,我会让专家看看。我只是愿意得到一个完全按照我想要的格式格式化的字符串,但是货币符号给了我一个问题:当我只想要符号时,它使用了某种国际代码。

NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setCurrencyCode:currencyCode];
[formatter setPositiveFormat:@"#,##0.00 ¤"];
[formatter setNegativeFormat:@"-#,##0.00 ¤"];

这导致: 1,250.56美元而不是1,250.56美元

我不会设置语言环境,因为我只有一个符号:EUR / USD / GBP 等。

4

2 回答 2

4

如果你想要一个美元符号而只是一个美元符号,为什么不直接指定一个像'$#,##0.00'文字这样的格式$呢?或者,指定默认情况下将按照您想要的方式格式化金额的语言环境。

指定NSNumberFormatterCurrencyStyle只是设置区域设置的标准货币格式的快捷方式,这将包括符号是作为金额的前缀还是后缀,但与您正在执行的操作几乎没有关系,因为您正在手动指定格式。

您看到US$是因为它正在为您所在地区适当地格式化货币美元。(尽管您必须混淆了格式字符串和输出,因为它确实尊重您是否请求货币代码的前缀或后缀位置。)但 darvids0n 大部分是正确的:

  • 格式字符串中的一个货币符号放置该货币的语言环境符号,在 en 和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的语法。)

于 2011-10-26T23:44:16.583 回答
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 $
于 2011-10-26T23:23:01.447 回答