Mon application utilise des valeurs monétaires, et je voudrais représenter ces valeurs dans la devise et les formats que l'utilisateur a définis sur son iPhone. Cependant, lors des tests, je semble avoir des problèmes avec le format EURO allemand.Bug avec iPhone Monnaie pour le format Euro avec NSDecimalNumber utilisant NSLocale?
J'ai une méthode qui retourne un nombre décimal (pour stocker dans les données de base) de la chaîne au format monétaire. La chaîne a été formatée par une autre méthode (similaire) en utilisant NSlocale.
J'ai testé avec des paramètres régionaux UK, US, japonais et allemands, jusqu'à présent, seule l'Allemagne a causé des problèmes.
Voici le code, la chaîne étant passé est par exemple: 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];
}
La variable 'currencyNumber' est imprimé comme: -18446912453607470532000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
alors que dans tous les les autres locales, il imprimerait 2.56 pour stocker dans les données de base en tant que NSDecimalNumber.