web-dev-qa-db-fra.com

Formatage flottant en C ++

Comment formatez-vous un flottant en C++ pour sortir en deux décimales arrondies? Je n'ai pas de chance avec setw et setprecision car mon compilateur me dit juste que c'est not defined.

cout << "Total : " << setw(2) << total << endl;

sorties totales: Total : 12.3961

J'aimerais que ce soit: 12.40 Ou 12.39 Si c'est trop de travail à arrondir.

16
eveo

Vous devez inclure <iomanip> et fournir une étendue d'espace de noms à setw and setprecision

#include <iomanip>
std::setw(2)
std::setprecision(5)

essayer:

cout.precision(5);
cout << "Total : " << setw(4)   << floor(total*100)/100 << endl;

ou

 cout << "Total : " << setw(4)   << ceil(total*10)/10 << endl;

iostream fournit une fonction de précision, mais pour utiliser setw, vous devrez peut-être inclure un fichier d'en-tête supplémentaire.

16
billz

Utilisez cout << fixed Ou cout.setf(ios::fixed) et std::cout.precision(<# of decimal digits>) comme ci-dessous (en utilisant le compilateur Clang-503.0.40 inclus avec OSX Mavericks):

#include <iostream>

int main()
{
   using namespace std;

   float loge = 2.718;
   double fake = 1234567.818;
   cout << fixed;
   cout.precision(2);
   cout << "loge(2) = " << loge << endl;
   cout << "fake(2) = " << fake << endl;
   cout.precision(3);
   cout << "loge(3) = " << loge << endl;
   cout << "fake(3) = " << fake << endl;
}

La sortie de ceci est (notez l'arrondi):

loge(2) = 2.72
fake(2) = 1234567.82
loge(3) = 2.718
fake(3) = 1234567.818

Ceci est la version simple. Au lieu d'utiliser cout << fixed;, Vous pouvez utiliser cout.setf(ios::fixed); (pour afficher la notation scientifique, remplacez fixe par scientifique; les deux définiront le nombre de chiffres à droite du séparateur décimal). Notez que cout.precision () est également utilisé pour définir le nombre de chiffres affichés au total de chaque côté du séparateur décimal si les indicateurs de format n'incluent pas fixe ou scientifique . Il existe des didacticiels à ce sujet sur Internet.

16
Jon Spencer

Pour inclure également le zéro de fin, il ne suffit pas de définir la précision. Vous devez également modifier le format à virgule flottante en format fixe , qui utilise le nombre de chiffres indiqué par setprecision comme nombre de chiffres après le point décimal :

std::cout << std::fixed << std::setprecision(2) << v;

Exemple de code de travail en ligne

13
leemes

Si vous souhaitez arrondir le zéro de fin, vous pouvez utiliser la fonction C printf.

#include <iostream>
#include <cstdio>

int main() {
    float v = 12.3961;
    std::printf("%.2f",v); //prints 12.40
}

Par rapport à:

#include <iostream>
#include <iomanip>

int main() {
    float v = 12.3961;
    std::cout << std::setprecision(4) << v; //prints 12.4
}
3
Rapptz