2009-07-10 11 views
0

de formatage très grandes, des chiffres précis que je fais:en utilisant NSNumberFormatter avec NSDecimalNumberHandler en tant que test rapide iphone sdk

 
(number is a synthesized NSDecimalNumber...) 
number = [[NSDecimalNumber alloc] initWithDecimal:[[NSDecimalNumber numberWithDouble:420000008698643507200000.0F] decimalValue]]; 
DLog(@"unformatted: %@", [number stringValue]); 

qui me donne: "non formatée: 420000008698643507200000"

mais quand je essayez de le formater via NSNumberFormatter, il est tout à fait hors ... chemin arrondi vers le haut ou quelque chose ...

 
    numFormatter = [[NSNumberFormatter alloc] init]; 
    [numFormatter setNumberStyle:kCFNumberFormatterDecimalStyle]; 
    [numFormatter setRoundingMode:kCFNumberFormatterRoundDown]; 
    [numFormatter setMaximum:nil]; 

    DLog(@"formatted: %@", [numFormatter stringFromNumber:number]); 

me donne: « formaté: 420.000.008.698.644.000.000.000 »

J'espère qu'il ya une propriété magique NSNumberFormatter secrète que je ne vois pas, mais j'ai essayé setUsesSignificantDigits et setMaximumSignificantDigits, mais cela ne semble pas fonctionner.

quelqu'un a des idées? merci beaucoup!

Répondre

1

Votre perte de précision vient du fait que NSNumberFormatter convertit le nombre en un double.

Avez-vous envisagé d'utiliser la méthode NSDecimalNumber's descriptionWithLocale:? Comme point de départ, vous pouvez simplement passer en [NSLocale currentLocale] en tant que param. Ensuite, vous pouvez commencer à jouer avec la configuration locale via NSLocaleDecimalSeparator et NSLocaleGroupingSeparator.

Questions connexes