Drucken der richtigen Anzahl von Dezimalstellen mit cout

133

Ich habe eine Liste von floatWerten und möchte sie coutmit 2 Dezimalstellen drucken .

Beispielsweise:

10.900  should be printed as 10.90
1.000 should be printed as 1.00
122.345 should be printed as 122.34

Wie kann ich das machen?

( setprecisionscheint dabei nicht zu helfen.)

Thameera
quelle

Antworten:

195

Mit <iomanip>können Sie std::fixedund verwendenstd::setprecision

Hier ist ein Beispiel

#include <iostream>
#include <iomanip>

int main()
{
    double d = 122.345;

    std::cout << std::fixed;
    std::cout << std::setprecision(2);
    std::cout << d;
}

Und Sie erhalten Ausgabe

122.34
Beduin
quelle
6
Warum haben Sie "std: fixed" im Programm verwendet?
Vilas Joshi
1
Hierfür kann ein nützlicher Header definiert werden: Dies #define FIXED_FLOAT(x) std::fixed <<std::setprecision(2)<<(x) vereinfacht die Verwendung auf:cout<<FIXED_FLOAT(d)
Udayraj Deshmukh
12
@VilasJoshi, setprecision setze die Anzahl der Ziffern nach der Dezimalstelle. Wenn es 5 Ziffern gibt und wir setprecision (2) verwenden, erhalten wir 2 Ziffern, aber wenn es 0 Ziffern gibt, werden keine angezeigt zu zeigen, so wird 5 als 5,00 Nr. 5 dargestellt
Vaibnak
43

Sie waren fast da, müssen auch std :: fixed verwenden, siehe http://www.cplusplus.com/reference/iostream/manipulators/fixed/

#include <iostream>
#include <iomanip>

int main(int argc, char** argv)
{
    float testme[] = { 0.12345, 1.2345, 12.345, 123.45, 1234.5, 12345 };

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

    for(int i = 0; i < 6; ++i)
    {
        std::cout << testme[i] << std::endl;
    }

    return 0;
}

Ausgänge:

0.12
1.23
12.35
123.45
1234.50
12345.00
Vusak
quelle
18

setprecision(n)gilt für die gesamte Zahl, nicht für den Bruchteil. Sie müssen das Festkommaformat verwenden, damit es auf den Bruchteil angewendet wird:setiosflags(ios::fixed)

QuantumMechanic
quelle
12

Vereinfachen Sie die akzeptierte Antwort

Vereinfachtes Beispiel:

#include <iostream>
#include <iomanip>

int main()
{
    double d = 122.345;
    std::cout << std::fixed << std::setprecision(2) << d;
}

Und Sie erhalten Ausgabe

122.34

Referenz:

einverne
quelle
Das hat bei mir funktioniert: std :: cout << std :: setprecision (2) << std :: fixed << d;
Andrea Girardi
5

Ich hatte ein Problem mit ganzen Zahlen, während ich eine konsistente Formatierung wünschte.

Ein Umschreiben der Vollständigkeit halber:

#include <iostream>
#include <iomanip>

int main()
{
    //    floating point formatting example

    double d = 122.345;
    cout << std::fixed << std::setprecision(2) << d << endl;
    //    Output:  122.34


    //    integer formatting example

    int i = 122;
    cout << std::fixed << std::setprecision(2) << double(i) << endl;
    //    Output:  122.00
}
Manohar Reddy Poreddy
quelle
Sie vermissen std :: direkt vor cout und endl, da Sie den Namespace nicht verwenden.
Blackforest-Tom
@ blackforest-tom - Vielleicht haben Sie Recht, können sich nicht erinnern --- Ich kopiere und füge im Allgemeinen Arbeitsprogramme ein, sodass diese möglicherweise so wie sie sind in Visual Studio oder anderswo ausgeführt wurden.
Manohar Reddy Poreddy
3

Ich hatte dieses ähnliche Problem in einem Codierungswettbewerb und so habe ich damit umgegangen. Festlegen einer Genauigkeit von 2 für alle Doppelwerte

Fügen Sie zuerst den Header hinzu, um setprecision zu verwenden

#include <iomanip>

Fügen Sie dann den folgenden Code in unser Hauptcode ein

  double answer=5.9999;
  double answer2=5.0000;
  cout<<setprecision(2)<<fixed;
  cout <<answer << endl;
  cout <<answer2 << endl;

Ausgabe:

5.99
5.00

Sie müssen fest zum Schreiben von 5.00 verwenden, deshalb wird Ihre Ausgabe nicht für 5.00 kommen.

Ein kurzer Referenzvideolink, den ich hinzufüge, ist hilfreich

Hargun Singh
quelle
2

Sie müssen den 'Float-Modus' auf fest einstellen.

float num = 15.839;

// this will output 15.84
std::cout << std::fixed << "num = " << std::setprecision(2) << num << std::endl;
Eric Z.
quelle
1

Verwenden Sie zuerst die folgenden 2 Stellen nach dem Dezimalpunkt:

cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);

Dann drucken Sie Ihre doppelten Werte.

Dies ist ein Beispiel:

#include <iostream>
using std::cout;
using std::ios;
using std::endl;

int main(int argc, char *argv[]) {
    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(2);
    double d = 10.90;
    cout << d << endl;
    return 0;
}
Hamid Rohani
quelle
1
#include<stdio.h>
int main()

{

 double d=15.6464545347;

printf("%0.2lf",d);

}
saurav52
quelle
0

mit Vorlagen

#include <iostream>

// d = decimal places
template<int d> 
std::ostream& fixed(std::ostream& os){
    os.setf(std::ios_base::fixed, std::ios_base::floatfield); 
    os.precision(d); 
    return os; 
}

int main(){
    double d = 122.345;
    std::cout << fixed<2> << d;
}

Ähnliches gilt auch für wissenschaftliche Zwecke, mit einer Breitenoption (nützlich für Spalten).

// d = decimal places
template<int d> 
std::ostream& f(std::ostream &os){
    os.setf(std::ios_base::fixed, std::ios_base::floatfield); 
    os.precision(d); 
    return os; 
}

// w = width, d = decimal places
template<int w, int d> 
std::ostream& f(std::ostream &os){
    os.setf(std::ios_base::fixed, std::ios_base::floatfield); 
    os.precision(d); 
    os.width(w);
    return os; 
}

// d = decimal places
template<int d> 
std::ostream& e(std::ostream &os){
    os.setf(std::ios_base::scientific, std::ios_base::floatfield); 
    os.precision(d); 
    return os; 
}

// w = width, d = decimal places
template<int w, int d> 
std::ostream& e(std::ostream &os){
    os.setf(std::ios_base::scientific, std::ios_base::floatfield); 
    os.precision(d); 
    os.width(w);
    return os; 
}

int main(){
    double d = 122.345;
    std::cout << f<10,2> << d << '\n'
        << e<10,2> << d << '\n';
}
QuentinUK
quelle
-3

Nur ein kleiner Punkt; Fügen Sie Folgendes in die Kopfzeile ein

Verwenden des Namespace std;

dann

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

wird vereinfacht

cout << fixed << setprecision (2) << d;

Davidjgw
quelle
2
Ja, es wird "vereinfacht", aber davon wird dringend abgeraten. Bitte nicht verwenden using namespace std;- verstehen Sie, warum Sie dies tun.
Carlos F
-6

Dies ist ein Beispiel mit einer Matrix.

cout<<setprecision(4)<<fixed<<m[i][j]
Luis Enrique Martinez
quelle