web-dev-qa-db-fra.com

Comment faire pour 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: "<<x<<"\tSon faiz: "<<t<<"\tSon ana: "<<x+t<<endl;      
}

c'est la sortie

Bas ana: 3284.78 Fils faiz: 1784.78 Fils ana: 5069.55

Bas ana: 7193.17 Fils faiz: 3908.4 Fils ana: 11101.6

Bas ana: 15752 Fils faiz: 8558.8 Fils ana: 24310.8

Bas ana: 34494.5 Fils faiz: 18742.5 Fils ana: 53237

Bas ana: 75537.8 Fils faiz: 41043.3 Fils ana: 116581

Bas ana: 165417 Fils faiz: 89878.7 Fils ana: 255295

Bas ana: 362238 Fils faiz: 196821 Fils ana: 559059

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

Bas ana: 1.73709e + 006 Faiz fils: 943845 Son ana: 2.68094e + 006

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

Je veux que les nombres soient affichés avec des nombres exacts et non des nombres scientifiques. Comment puis-je faire ceci?

55

Utilisation std::fixed manipulateur de flux:

cout<<fixed<<"Bas ana: "<<x<<"\tSon faiz: "<<t<<"\tSon ana: "<<x+t<<endl;
77
Tugrul Ates

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 <<endl;

Cependant, après avoir fait cela, chaque fois que vous imprimez un flottant ou un double n'importe où dans votre projet, le nombre sera toujours imprimé dans cette notation fixe. Vous pouvez le retourner en utilisant

cout << scientific;

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

C'est pourquoi Boost a fait l'économiseur d'état du flux d'E/S , qui renvoie automatiquement le flux d'E/S que vous utilisez à l'état qu'il était avant votre appel de fonction. Vous pouvez l'utiliser comme ceci:

#include <boost/io/ios_state.hpp> // you need to download these headers first

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

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

} // at this bracket, when ifs goes "out of scope", your stream is reset

Vous pouvez trouver plus d'informations sur l'économiseur d'état de flux d'E/S de Boost dans les documents officiels .

Vous pouvez également consulter la bibliothèque Boost Format qui peut également faciliter votre sortie, surtout si vous devez faire face à l'internationalisation. Cependant, cela ne vous aidera pas pour ce problème particulier.

20
Migi

codez la syntaxe suivante:

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

(n) est le nombre de précision décimale. Cela devrait le réparer.

2
Ahmad Mhd Yones

Vous pouvez utiliser des indicateurs de format

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

2
muhoweb

Il y a toute une collection d'opérateurs de formatage que vous obtenez avec iostream. Voici un tutoriel pour vous aider à démarrer.

1
Charlie Martin