C++ Konsolenanwendung mehr Stellen nach dem Komma?

2 Antworten

Du musst die Zahl der Kommastellen, die ausgedruckt werden sollen, im Format mit angeben. 

Hier ein Beispiel:

float x1 = 2.0/3 ;
double x2 = 2.0/3 ;

fprintf( stdout, "\nx1 = %8.7f", x1 );
fprintf( stdout, "\nx2 = %8.7f", x2 );

Im Ausdruck erscheint:

x1 = 0.6666667
x2 = 0.6666667

Wie man sieht, wird sogar korrekt gerundet.

fpintf ist nicht C++-Stil. In C++ ist std::setw(n) und std::setprecision(m)  Lösung deines Problems. Will man z.B. eine Zahl x im fixed-Format mit 16 Zeichen (inkl. führende Leerzeichen) und 10 Stellen nach dem Komma ausgeben:

std::cout<<std::fixed<<std::setw(16)<<std::setprecision(10) <<x<<std::endl;

Man kann auch im wissenschaftlichen Format ausgeben. Da ist z.B. sowas möglich:

std::cout<<std::scientific<<std::setw(16)<<std::setprecision(8) <<x<<std::endl;

Wichtig ist

#include <iostream>
#include <iomanip>

im Kopf deiner h- oder cpp-Quelldatei.

Viel Spaß

Also der eigentliche Unterschied von der std::cout Version und der fprintf Version ist, dass das eine einfach zu C++ gehört? Gibt es noch andere Unterschiede? fprintf erscheint mir bis jetzt einfacher...

0
@IBAxhascox

ging mir früher auch so. Aber: cout, cin und cerr ordnen sich in das allgemeine C++-Konzept ein. Z.B. erbt std::cout von der Klasse std::ostream genau wie auch std::ofstream, mit dem man in eine Datei schreiben kann. Es ist somit möglich, Methoden zu schreiben, die es erst einmal offen lassen, ob man in std::cout oder std::ofstream schreibt. Das ist C++. Sobald du das wirklich brauchst, wirst du froh sein, dass es sowas gibt.

0

Was möchtest Du wissen?