3 votes

NSNumberFormatter ne formate que jusqu'à 14 chiffres significatifs.

J'ai vu un code qui essayait de formater les coordonnées de latitude et de longitude en utilisant le NSNumberFormatter suivant.

NSNumberFormatter * sut = [[NSNumberFormatter alloc] init];
[sut setMaximumFractionDigits:20]; // also tried set to 15 or 16, not working too.
[sut setMaximumSignificantDigits:20];

NSLocale *enUSPOSIXLocale = [[NSLocale alloc]initWithLocaleIdentifier:@"en_US_POSIX"];
[sut setLocale:enUSPOSIXLocale];

NSString *expected = @"1.299129258067496"; // 16 significants digits
NSString *actual = [sut stringFromNumber:@(1.299129258067496)];

[[actual should] equal:expected];// Failed to pass, the actual is @"1.2991292580675"

Bien que dans ce cas, nous n'ayons pas besoin d'utiliser le NSNumberFormatter pour obtenir le bon résultat, je me demande pourquoi le NSNumberFormatter ne renvoie que des chaînes de 14 chiffres significatifs au maximum.

1voto

Simon Acker Points 11

Il n'affiche que 14 décimales car le type double arrondit à 15 décimales. Cela a fonctionné pour moi car vous pouvez définir le nombre de décimales affichées.

[NSString stringWithFormat:@"%.20f", 1.299129258067496]

Assurez-vous simplement que le nombre de décimales ne dépasse pas le nombre, sinon le programme invente des chiffres pour remplir le reste. J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X