Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSDecimalFormatter和货币符号:$US而不是$_Objective C_Ios_Nsdecimalnumber - Fatal编程技术网

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'