J’ai trouvé un format intéressant pour imprimer des chaînes de longueur fixe non distinées comme ceci:
char newstr[40] = {0}; sprintf(newstr,"%.*s", sizeof(mystr), mystr);
Donc, je pense que la commande printf permet peut-être d’imprimer un nombre à virgule flottante …
“% 8.2f”
pouvoir choisir le nombre de décimales avec un nombre entier.
Quelque chose comme ça:
sprintf(mystr, "%d %f", numberofdecimals, floatnumbervalue)
EDIT – Solution:
(pour arrondir et effacer un numéro de flottant avec la précision désirée).
int precision = 2; char kolf[16] = {0}; sprintf(kolf, "%8.*f", precision, mystruct.myfloat); float kol = atof(kolf);
Vous pouvez également utiliser ".*"
Avec des points flottants, voir aussi http://www.cplusplus.com/reference/cstdio/printf/ (fait référence à C ++, mais les spécificateurs de format sont similaires)
.number : Pour les spécificateurs A, A, E, F et F: il s’agit du nombre de chiffres à imprimer après le point décimal (par défaut, il s’agit de 6).
…
. * : La précision n’est pas spécifiée dans la chaîne de format, mais sous la forme d’un argument de valeur entière supplémentaire précédant le paramètre à formater.
Par exemple:
float floatnumbervalue = 42.3456; int numberofdecimals = 2; printf("%.*f", numberofdecimals, floatnumbervalue);
Sortie:
42.35
Vous pouvez également utiliser l’astérisque pour la largeur et la précision du champ:
printf("%*.*f\n", myFieldWidth, myPrecision, myFloatValue);
Voir par exemple cette référence .