Le code suivant affichera les valeurs de a et b:
double a = 3.0, b=1231231231233.0123456; cout.setf(std::ios::fixed); cout.unsetf(std::ios::scientific); cout << a << endl << b << endl
La sortie est:
3.000000 1231231231233.012451
Vous pouvez voir que a est généré avec un nombre fixe de 6 décimales. Mais je veux la sortie comme ceci:
3 1231231231233.012451
Comment puis-je définir les indicateurs une seule fois et afficher le résultat ci-dessus?
Le stream insère 0
s après le double car la précision par défaut du stream pour la sortie des valeurs à virgule flottante est de 6. Malheureusement, il n’existe aucun moyen simple de vérifier si le double représente un nombre entier (vous ne pouvez donc imprimer que la partie intégrale). . Ce que vous pouvez faire est toutefois de convertir la valeur en un entier.
std::cout << static_cast(a);
La mise en forme par défaut pour les nombres à virgule flottante ne prend pas en charge les formats demandés. Il existe essentiellement trois parameters que vous pouvez utiliser:
std::fixed
qui utilisera precision()
chiffres de precision()
après le point décimal. std::scientific
qui utilisera la notation scientifique avec une precision()
chiffres. std::defaultfloat
qui choisira la plus courte des deux formes. (il existe également std::hexfloat
mais cela ne fait que formater le nombre sous une forme facilement lisible par une machine).
Ce que vous pouvez faire est de créer votre propre facette std::num_put
qui formate la valeur dans un tampon local à l’aide de std::fixed
ce qui std::num_put
chiffres avant d’envoyer les valeurs.