107 votes

Comment faire en sorte que C++ cout n'utilise pas la notation scientifique

double x = 1500;
for(int k = 0; k<10 ; k++){
    double t = 0;
    for(int i=0; i<12; i++){
        t += x * 0.0675;
        x += x * 0.0675;
    }
    cout<<"Bas ana: "<

`

Voici la sortie

Bas ana: 3284.78 Son faiz: 1784.78 Son ana: 5069.55

Bas ana: 7193.17 Son faiz: 3908.4 Son ana: 11101.6

Bas ana: 15752 Son faiz: 8558.8 Son ana: 24310.8

Bas ana: 34494.5 Son faiz: 18742.5 Son ana: 53237

Bas ana: 75537.8 Son faiz: 41043.3 Son ana: 116581

Bas ana: 165417 Son faiz: 89878.7 Son ana: 255295

Bas ana: 362238 Son faiz: 196821 Son ana: 559059

Bas ana: 793246 Son faiz: 431009 Son ana: 1.22426e+006

Bas ana: 1.73709e+006 Son faiz: 943845 Son ana: 2.68094e+006

Bas ana: 3.80397e+006 Son faiz: 2.06688e+006 Son ana: 5.87085e+006

Je veux que les chiffres soient affichés avec des chiffres exacts et non en notation scientifique. Comment puis-je faire cela?

`

140voto

junjanes Points 4858

Utilisez std::fixed manipulateur de flux :

cout<

42voto

Migi Points 942

Comme mentionné ci-dessus, vous pouvez utiliser std::fixed pour résoudre votre problème, comme ceci :

cout << fixed;
cout << "Bas ana : " << x << "\tSon faiz : " << t << "\tSon ana : " << x + t <

``

Cependant, une fois que vous avez fait cela, à chaque fois que vous imprimez un float ou un double n'importe où dans votre projet, le nombre sera toujours imprimé dans cette notation fixe. Vous pouvez le réinitialiser en utilisant

cout << scientific;

mais cela peut devenir fastidieux si votre code devient plus compliqué.

C'est pourquoi Boost a créé le Économiseur d'État du Flot d'Entrée/Sortie, qui rétablit automatiquement le flot d'entrée/sortie que vous utilisez à l'état dans lequel il se trouvait avant votre appel de fonction. Vous pouvez l'utiliser comme ceci :

#include  // vous devez d'abord télécharger ces en-têtes

{
    boost::io::ios_flags_saver  ifs( os );

    cout << ios::fixed;
    cout << "Bas ana : " << x << "\tSon faiz : " << t << "\tSon ana : " << x + t <

`

Vous pouvez trouver plus d'informations sur l'Économiseur d'État du Flot d'Entrée/Sortie de Boost dans la documentation officielle.

Vous voudrez peut-être aussi consulter la bibliothèque Boost Format qui peut également faciliter votre sortie, surtout si vous devez gérer l'internationalisation. Cependant, cela ne vous aidera pas pour ce problème particulier.

` ``

18voto

Ahmad Yones Points 101

Codez la syntaxe suivante:

std::cout << std::fixed << std::setprecision(n);

(n) est le nombre de décimales de précision. Cela devrait résoudre le problème.

P.s.: vous devez inclure #include afin d'utiliser std::setprecision.

11voto

vitaut Points 10255

En C++20, vous pourrez utiliser std::format pour faire ceci :

std::cout << std::format("Bas ana: {:f}\tSon faiz: {:f}\t"
                         "Son ana: {:f}\n", x, t, x + t);

Sortie :

Bas ana: 3284.776791    Son faiz: 1784.776791   Son ana: 5069.553581
Bas ana: 7193.172376    Son faiz: 3908.395585   Son ana: 11101.567961
...

L'avantage de cette approche est qu'elle ne modifie pas l'état du flux.

En attendant, vous pouvez utiliser la bibliothèque {fmt}, sur laquelle std::format est basé. {fmt} fournit également la fonction print qui rend cela encore plus facile et plus efficace (godbolt) :

fmt::print("Bas ana: {:f}\tSon faiz: {:f}\tSon ana: {:f}\n", x, t, x + t);

Avertissement : Je suis l'auteur de {fmt} et de std::format en C++20.

3voto

muhoweb Points 106

Vous pouvez utiliser des drapeaux de format

Plus d'informations : http://www.cplusplus.com/reference/iostream/ios_base/fmtflags/

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