Wie man C++ dazu bringt, keine wissenschaftliche Notation zu verwenden

Lesezeit: 1 Minute

Wie man C dazu bringt keine wissenschaftliche Notation zu verwenden
Yunus Eren Güzel

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

dies die Ausgabe

Bas ana: 3284,78 Sohn faiz: 1784,78 Sohn ana: 5069,55

Bas ana: 7193,17 Sohn faiz: 3908,4 Sohn ana: 11101,6

Bas ana: 15752 Sohn faiz: 8558,8 Sohn ana: 24310,8

Bas ana: 34494,5 Sohn faiz: 18742,5 Sohn ana: 53237

Bas ana: 75537,8 Sohn faiz: 41043,3 Sohn ana: 116581

Bas ana: 165417 Sohn faiz: 89878.7 Sohn ana: 255295

Bas ana: 362238 Sohn faiz: 196821 Sohn ana: 559059

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

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

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

Ich möchte, dass Zahlen mit genauen Zahlen angezeigt werden, nicht mit wissenschaftlichen Zahlen. Wie kann ich das machen?

  • Warum wirkst du a double zu double?

    – Fred Foo

    6. März 11 um 17:18 Uhr

  • Mögliches Duplikat von Verhindern Sie die wissenschaftliche Notation im Ostream, wenn Sie << mit double verwenden

    – Mechanische Schnecke

    22. August 12 um 3:38 Uhr

1644166865 271 Wie man C dazu bringt keine wissenschaftliche Notation zu verwenden
Tugrul Ates

Benutzen std::fixed Stream-Manipulator:

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

Wie man C dazu bringt keine wissenschaftliche Notation zu verwenden
Migi

Wie oben erwähnt, können Sie verwenden std::fixed um dein problem so zu lösen:

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

Nachdem Sie dies jedoch getan haben, jedes Mal, wenn Sie a drucken float oder ein double überall in Ihrem Projekt, wird die Nummer weiterhin in dieser festen Schreibweise gedruckt. Sie können es mit zurückdrehen

cout << scientific;

Dies kann jedoch mühsam werden, wenn Ihr Code komplizierter wird.

Aus diesem Grund hat Boost die I/O Stream State Saver, wodurch der von Ihnen verwendete I/O-Stream automatisch in den Zustand zurückversetzt wird, in dem er sich vor Ihrem Funktionsaufruf befand. Sie können es wie folgt verwenden:

#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

Weitere Informationen zum I/O Stream State Saver von Boost finden Sie in die offiziellen Dokumente.

Vielleicht möchten Sie auch mal vorbeischauen Boost-Format-Bibliothek was auch Ihre Ausgabe erleichtern kann, insbesondere wenn Sie sich mit Internationalisierung befassen müssen. Es wird Ihnen jedoch bei diesem speziellen Problem nicht helfen.

1644166867 284 Wie man C dazu bringt keine wissenschaftliche Notation zu verwenden
Ahmad Yones

Code die nächste Syntax:

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

wo (n) ist die Zahl der Dezimalgenauigkeit. Dies sollte es beheben.

Ps: musst du #include <iomanip> um zu verwenden std::setprecision.

In C++20 können Sie verwenden std::format um dies zu tun:

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

Ausgabe:

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

Der Vorteil dieses Ansatzes besteht darin, dass der Stream-Status nicht geändert wird.

In der Zwischenzeit können Sie verwenden die {fmt}-Bibliothek, std::format basiert auf. {fmt} bietet auch die print Funktion, die dies noch einfacher und effizienter macht (Gottriegel):

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

Haftungsausschluss: Ich bin der Autor von {fmt} und C++20 std::format.

Sie können Format-Flags verwenden

Mehr Info: http://www.cplusplus.com/reference/iostream/ios_base/fmtflags/

1644166867 110 Wie man C dazu bringt keine wissenschaftliche Notation zu verwenden
Charly Martin

Es gibt eine ganze Sammlung von Formatierungsoperatoren, die Sie mit iostream erhalten. Hier ist ein Lernprogramm um Ihnen den Einstieg zu erleichtern.

1644166867 235 Wie man C dazu bringt keine wissenschaftliche Notation zu verwenden
Zig Razor

Sie können die Funktion verwenden Fest auf diese Weise :

std::cout << std::fixed << ...

Oder Sie können die printf-Funktion mit einem Standardformat wie “12.12%f” auf diese Weise verwenden:

printf (“number = %12.12f”, float_number);

.

799640cookie-checkWie man C++ dazu bringt, keine wissenschaftliche Notation zu verwenden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy