Si vous n’avez pas% f en C, comment écrire un programme C pour imprimer un nombre décimal jusqu’à 2 décimales sans% f?

Aidez-moi à écrire un programme en C pour ma question.

Ques – Vous n’avez pas %f en C. Comment écrire un programme en C pour imprimer un nombre décimal jusqu’à 2 décimales sans utiliser %f ?

 #include  #include  int main(void) { double num = 3.1416, a, b; b = modf(num, &a) * 10000; printf("%d.%d\n", (int)a, (int)b); return 0; } 

Comme l’a souligné @mch, cela ne fonctionne pas pour des nombres comme 3.04, une solution qui fonctionne ( fournie par Martin ):

 #include  #include  void dbl2str(char *s, double number, int decimals) { double integral, fractional, epsilon = 1e-9; double round = 0.5 * pow(10, -decimals); int n, i; fractional = modf(number + round + epsilon, &integral); n = sprintf(s, "%d%c", (int)integral, decimals ? '.' : 0); for (i = 0; i < decimals; i++) { fractional *= 10; s[n + i] = '0' + (int)fractional; fractional = modf(fractional, &integral); } s[n + i] = '\0'; } int main(void) { char s[32]; dbl2str(s, 3.1416, 4); printf("%s\n", s); dbl2str(s, 3.159, 4); printf("%s\n", s); dbl2str(s, 3.05, 3); printf("%s\n", s); return 0; } 

Sortie:

 3.1416 3.1590 3.050 

Pourquoi avons-nous besoin de bidouillage? Laisse aller en standard

Si vos données flottantes sont au format à virgule flottante simple précision

Ensuite, j’irais avec la spécification de format.

http://en.wikipedia.org/wiki/Single-precision_floating-point_format

Ici en 32 bits float

 Sign bit: 1 bit Exponent width: 8 bits Significand precision: 24 bits (23 explicitly stored) 

Vous pouvez donc décoder cela et imprimer en utilisant %d.%02d pour afficher l’intégrale et 2 décimales.

Je voudrais faire ce qui suit:

 float f = 23.48987; int integerPart = (int)f; // integerPart = 23 int decimalPart = (int)(f*100 - integerPart*100); // decimalPart = 48 printf("%d.%02d", integerPart, decimalPart); // printed value - 23.48