Comment utiliser «% f» pour renseigner une valeur double dans une chaîne avec la bonne précision

StackOverflow https://stackoverflow.com/questions/69743

Question

J'essaie de renseigner une chaîne avec une double valeur à l'aide d'un sprintf comme ceci:

sprintf(S, "%f", val);

Mais la précision est réduite à six décimales. J'ai besoin d'environ 10 décimales pour la précision.

Comment cela peut-il être réalisé?

Était-ce utile?

La solution

% [largeur]. [précision]

La largeur doit inclure le point décimal.

% 8.2 signifie une largeur de 8 caractères; 5 chiffres avant le point et 2 après. Un caractère est réservé au point.

5 + 1 + 2 = 8

Autres conseils

Ce que vous voulez, c'est un modificateur:

sprintf(S, "%.10f", val);

man sprintf aura beaucoup plus de détails sur les spécificateurs de format.

Attention, la sortie de sprintf varie selon les paramètres régionaux C. Cela peut être ou ne pas être ce que vous voulez. Voir LC_NUMERIC dans les pages de paramètres régionaux / man.

% f est destiné aux valeurs flottantes.

Essayez d’utiliser plutôt % lf . Il est conçu pour les doubles (qu'on appelait jadis des flotteurs longs).

double x = 3.14159265 ;
printf ("15.10lf \ n", x);

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top