Methode zur (speziellen) formatierten Ausgabe für (std::string-)Streams ...
-
Hali halo
,
Ich habe folgendes Problem:
Ich möchte eine Variable vom Typ long double in einen std::stringstream schreiben, allerdings so, dass die Zahlenwerte eine bestimmte Anzahl nicht überschreiten, Beispiel:long double value = 12.34576; std::stringstream stream; stream /* << setXXX(...) */ << value;Dieser Wert (12.34576) soll allerdings maximal 5 Stellen lang sein, also in diesem Beispiel als "12.345" ausgegeben werden. D.h., wenn die Zahl in 'value' beispielsweise 456,1235 wäre, sollte er daraus machen: "456,12".
Hoffe ihr versteht, was ich meine
. Schonmal danke
!PS: Habs schon mit std::fixed, std::setprecision und std::setw ausprobiert, aber irgendwie war das Ergebnis nicht zufriedenstellend.
-
Hallo
die folgende Funktion verwendet einen ostringstream für diese Problemstellung:string zahlToString(double d, unsigned int weite, unsigned int format, // 0: fix, 1: scientific // sonst: automatisch unsigned int anzahlNachkommastellen ) {// nur Format 0/1 ostringstream wandler; if(format == 0) { wandler.setf(ios::fixed, ios::floatfield); if(anzahlNachkommastellen > 0) wandler.setf(ios::showpoint); } else { if(format == 1) wandler.setf(ios::scientific, ios::floatfield); } if(format == 0 || format == 1) wandler.precision(anzahlNachkommastellen); if(weite > 0) wandler.width(weite); // Zahl und abschließendes Nullzeichen in den Strom einfügen wandler << d << ends; return wandler.str(); }Man sieht auch, welche ios-Parameter gesetzt werden. Die Funktion kann für integer-Typen überladen werden:
string zahlToString(long i, unsigned int weite) { return zahlToString(static_cast<double>(i), weite, 0, 0); } string zahlToString(int i, unsigned int weite) { return zahlToString(static_cast<double>(i), weite, 0, 0); } string zahlToString(unsigned long i, unsigned int weite) { return zahlToString(static_cast<double>(i), weite, 0, 0); } string zahlToString(unsigned int i, unsigned int weite) { return zahlToString(static_cast<double>(i), weite, 0, 0); }
-
Nachtrag: std:: fehlt ggf noch, using namespace std; war vorausgesetzt.