내 앱에서 금전적 가치를 사용하고 있으며 사용자가 iPhone에서 설정 한 통화 및 형식으로이 값을 나타내려고합니다. 테스트 할 때 독일 EURO 형식으로 문제가있는 것 같습니다.NSLecale을 사용하여 NSDecimalNumber가있는 유로화 형식의 iPhone 통화가있는 버그?
통화 서식이 지정된 문자열에서 10 진수 (핵심 데이터에 저장하기 위해)를 반환하는 메서드가 있습니다. 이 문자열은 실제로 NSlocale을 사용하는 다른 (유사한) 메서드로 포맷되었습니다.
영국, 미국, 일본 및 독일 로켈에서 테스트 한 결과 지금까지 독일에서만 문제가 발생했습니다. 모두 반면 -18446912453607470532000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
: 2,56 €
+ (NSDecimalNumber*)TLCurrencyFormatFromString:(NSString*)strNumber {
NSNumberFormatter *fmtrCurrencyFromStr = nil;
fmtrCurrencyFromStr = [[NSNumberFormatter alloc] init];
[fmtrCurrencyFromStr setFormatterBehavior:NSNumberFormatterBehavior10_4];
[fmtrCurrencyFromStr setLocale:[NSLocale currentLocale]];
[fmtrCurrencyFromStr setNumberStyle:NSNumberFormatterCurrencyStyle];
[fmtrCurrencyFromStr setGeneratesDecimalNumbers:YES];
NSLog(@"Currency Separator: %@", [fmtrCurrencyFromStr decimalSeparator]); //prints a comma
NSLog(@"Currency Code: %@", [fmtrCurrencyFromStr currencyCode]); //prints EUR
int currencyScale = [fmtrCurrencyFromStr maximumFractionDigits];
NSDecimalNumberHandler *roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:currencyScale raiseOnExactness:FALSE raiseOnOverflow:TRUE raiseOnUnderflow:TRUE raiseOnDivideByZero:TRUE];
NSDecimalNumber* currencyNumber = [[NSDecimalNumber alloc] initWithDecimal:[[fmtrCurrencyFromStr numberFromString:strNumber] decimalValue]];
NSLog(@"Currency Number = %@", [currencyNumber decimalNumberByRoundingAccordingToBehavior:roundingBehavior]);
return [currencyNumber decimalNumberByRoundingAccordingToBehavior:roundingBehavior];
}
'currencyNumber'변수는 다음과 같이 인쇄됩니다 : 여기
코드입니다, 전달되는 문자열은, 예를 들면 다른 로케일의 경우 코어 데이터에 NSDecimalNumber로 저장하기 위해 2.56을 인쇄합니다.