Comment utiliser «% f» pour renseigner une valeur double dans une chaîne avec la bonne précision
-
09-06-2019 - |
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é?
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.
Pour une référence plus complète, voir l'article Wikipedia printf , section "espaces réservés au format printf" et un bon exemple de la même chose page .
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);