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?
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
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