2013-03-04 2 views
2
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; 
[numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; 
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
[numberFormatter setLocale:product.priceLocale]; 
NSString *localizedMoneyString = [numberFormatter stringFromNumber:product.price]; 
[numberFormatter release]; 

결과 : €0.89 예상 결과 : 결과는 동일 0,89€NSNumberFormatter 잘못된 결과

상관없이 setFormatterBehavior 값.

답변

4

이 결과가 잘못되었다고 생각하는 이유는 무엇입니까?

통화 표시기의 위치와 기호는 통화에만 의존하지 않으며 로캘에 따라 다릅니다.

예를 들어, 통화 코드 EUR (유로)을 예로 들어 보겠습니다. en_US (영어, 미국) 및 cs_CZ (체코, 체코)으로 설정된 로케일로 금액을 포맷하십시오. 각각 €0.890,89€이 표시됩니다.

에도 심볼의가 통화 코드 CZK (체코 코 루나)와 함께 해보자, 변경할 수 있습니다 - 당신은 각각 CZK 0.890,89 Kc를 얻을 수 있습니다.

로케일과 통화 코드를 입력하면 결과가 정확할 것입니다.

편집 :

NSLocale* locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_BG"] autorelease]; 
NSLog(@"%@", [locale objectForKey:NSLocaleCurrencyCode]); 
NSLog(@"%@", [locale objectForKey:NSLocaleDecimalSeparator]);

출력 : 당신이 볼 수 있듯이

BGN
.

는, 로케일 (현지 통화 코드가 BGN이다) 불가리아 지역 세트, 제대로 초기화되고 언어가 영어로 설정 (소수점 구분 기호는 점). 해당 영역에서 숫자 서식이 설정되지 않습니다. 그것은 언어에 의해 설정됩니다.

따라서 문제는 NSNumberFormatter 결과가 아니므로 문제가 예상대로 잘못되었습니다.

+0

로케일 -'en_BG @ currency = EUR', 예상 결과는'0.89 €' – h4cky

+0

입니다. 그렇다면 통화 기호가 가격 뒤에 왜없는가요? – h4cky

+0

이 로케일을 사용하는 앱 스토어의 가격 라벨을 확인하십시오. 가격 형식은 동일해야합니다. – pcholberg