2011-10-26 6 views
4
대신에 $ US

나는 분명히 뭔가를 놓치고 있어야합니다. 그러나 이것에 너무 많은 시간을 할애하지 못했기 때문에 전문가에게 살펴 보도록하겠습니다. 나는 그것을 원하는 방식으로 정확하게 포맷 된 문자열을 기꺼이 받아 들일 수 있지만, 통화 기호는 나에게 문제를주고있다 : 그것은 기호 만 원할 때 일종의 국제 코드를 사용하고있다.

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

이 문제를 재현하려면 많은 영어 사용자가 포맷터의 영역을 설정해야합니다. 예를 들어,'[formatter setLocale : [NSLocale localeWithLocaleIdentifier : @ "sv_SE"]]'를 사용하면, 포맷터는 $ 1234.99를 "1 234,99 US $"로 형식화합니다. –

+0

내 구세주! 내가 실제로 로케일을 EN으로 대체한다면, 나는 내가 원하는 것을 거의 할 수있다. :) – omartin

답변

-1

숫자 스타일은 통화의 경우 NSNumberFormatterCurrencyStyle으로 설정해야합니다.

편집 :의 $US 당신이보고있는이 CurrencyStyle에서 기본적으로 표시 할 몇 가지 (? 모든) 비 en 로케일에서 미국 달러에 대한 currencySymbol입니다 @Jeremy W. 셔먼에 의해 보정 당으로. 미국 달러의 경우 internationalCurrencySymbolUSD이며 개의 통화 문자를 Unicode tr35-10에 따라 제공하는 경우에만 국제 통화 기호가 표시됩니다.

통화 문자열을 구문 분석하고 알파 문자를 제거해야 할 것 같습니다. 물론 대문자 인 통화 기호가 없다고 가정합니다.

+0

그래, 내가 http://unicode.org/reports/tr35/tr35-10.html#Number_Format_Patterns를 따라 갔지만 여전히 운이 없다. ( – omartin

+0

@downvoter 대안이 없다면 OP의 문제를 해결하고 정확한 통화 기호를 보존 할 수있는 유일한 방법 일 것입니다. – darvids0n

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 

, 나는이 문제를 repro 수 없습니다. 나는 당신의 긍정적이고 부정적인 명시 적 형식의 작품 진수 스타일을 사용하는 경우 : 당신이 달러 기호 단지 달러 기호를 원하는 경우

// ... 
[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

매우 이상하게 작동하지 않습니다. 여전히 $ US 또는 £ UK를 얻습니다. – omartin

5

을, 왜 그냥 문자 그대로 $'$#,##0.00' 같은 형식을 지정? 또는 기본적으로 원하는대로 서식을 지정하는 로캘을 지정합니다.

NSNumberFormatterCurrencyStyle은 로케일의 표준 통화 형식이 무엇이든간에 설정하기위한 바로 가기 일뿐입니다. 기호의 접두사 또는 접미사가 포함되어 있지만 실제로하고있는 것에는 거의 영향을 미치지 않습니다. 형식.

US$이 해당 지역의 통화를 적절하게 설정했기 때문에 US$이 표시됩니다. (이 통화 코드의 접두어 또는 접미사 배치를 요청했는지 여부에 관계없이 서식 문자열과 출력이 섞여 있어야합니다.)하지만 darvids0n 대부분 맞다 : 형식 문자열에

  • 한 통화 기호가 욕실에서 "$"및 많은 다른 사람에 US$입니다 통화, 로케일의 기호를 배치;
  • "USD"와 같은 국제 기호는 두 자리에 저장됩니다.
  • 해당 통화의 로캘 표시 이름을 세 곳 (예 : "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.)

+0

+1 왜 내가 $ US를 보지 못했는지 (0123) – bryanmac

+0

그래, 그럴 수는 있어도 불행히도 다른 통화로는 효과가 없을거야. – omartin

관련 문제