85 votes

Deux décimales avec printf( )

J'essaie d'écrire un nombre avec deux décimales en utilisant printf() comme suit :

#include <cstdio>
int main()
{
  printf("When this number: %d is assigned to 2 dp, it will be: 2%f ", 94.9456, 94.9456);
  return 0;
}

Lorsque j'exécute le programme, j'obtiens le résultat suivant :

# ./printf
When this number: -1243822529 is assigned to 2 db, it will be: 2-0.000000

Comment cela se fait-il ?

Merci.

161voto

badgerr Points 4070

Ce que vous voulez, c'est %.2f , pas 2%f .

Vous pouvez également remplacer votre %d avec un %f ;)

#include <cstdio>
int main()
{
printf("When this number: %f is assigned to 2 dp, it will be: %.2f ", 94.9456, 94.9456);
return 0;
}

Cela produira un résultat :

Lorsque ce nombre : 94.945600 est affecté à 2 dp, il sera : 94.95

Voir ici pour une description complète des options de formatage de printf : printf

7voto

Jonathan Leffler Points 299946

Utiliser : "%.2f" ou des variations de ce type.

Véase el POSIX pour obtenir une spécification faisant autorité en matière de printf() les chaînes de format. Notez qu'il sépare les extras POSIX de la spécification principale C99. Il existe quelques sites C++ qui apparaissent dans une recherche Google, mais certains ont au moins une réputation douteuse, à en juger par les commentaires vus ailleurs sur SO.

Puisque vous codez en C++, vous devriez probablement éviter les printf() et ses proches.

5voto

Rozuur Points 1989

Pour %d se référer à ce document Comment fonctionne ce programme ? et pour les décimales, utiliser %.2f

-6voto

Mike Maske Points 9

Essayez d'utiliser un format comme %d.%02d

int iAmount = 10050;
printf("The number with fake decimal point is %d.%02d", iAmount/100, iAmount%100);

Une autre approche consiste à le convertir en double avant de l'imprimer à l'aide de %f, comme ceci :

printf("The number with fake decimal point is %0.2f", (double)(iAmount)/100);

Mes 2 cents :)

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