2009-03-31 7 views
2

Je suis en train de mettre en forme un grand nombre de devises comme ceci:Comment puis-je empêcher l'iPhone NSNumberFormatter d'arrondir?

NSNumber *testVal = [NSDecimalNumber decimalNumberWithString: @"999999999999999993.00"]; 
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle]; 
[formatter setMaximumIntegerDigits:19]; 
[formatter setMaximumFractionDigits:0]; 
NSNumberFormatter *formatter = [Formatters numberFormatterForField:f]; 
NSLog([formatter stringFromNumber:testVal]); 

Ignorer l'effet de l'environnement local pour un moment, je trouve que je reçois toujours la sortie suivante quel que soit l'arrondissement:

1,000,000,000,000,000,000 
Je pense

:

999,999,999,999,999,993 

J'ai essayé de changer l'arrondissement sans effet. Pourquoi NSNumberFormatter insiste-t-il pour arrondir?

Répondre

4

NSNumberFormatter convertit le nombre en double avant l'affichage, ce n'est donc pas ce que vous voulez. NSDecimalNumber a une méthode descriptionWithLocale: qui devrait répondre à vos besoins.

Voir cette réponse: link

+0

En fait, dans mon code original, je me donne un double et besoin de format. Je venais de passer à essayer NSDecimalNumber pour voir si cela faisait une différence (et ce n'est pas le cas). Je suppose qu'il n'y a aucun moyen d'éviter cette perte de précision lorsque NSNumberFormatter convertit d'un double en une chaîne? – thrusty

+0

Les doubles n'ont que 17-18 chiffres décimaux de précision pour commencer: http://cboard.cprogramming.com/c-programming/93742-extended-vs-double-precision.html NSNumberFormatter ne peut pas récupérer les informations qui ont déjà été perdues – rpetrich

Questions connexes