[gelöst] Double to String mit max. 2 Nachkommastellen

Alles rund um die Programmierung mit Qt
Antworten
101
Beiträge: 72
Registriert: 16. Januar 2008 16:28

[gelöst] Double to String mit max. 2 Nachkommastellen

Beitrag von 101 »

Hallo Zusammen,

irgendwie komme ich mit QString::setNum nicht zum gewünschten Ergebnis bei der Wandlung und Formatierung eines Double Wertes zu einem String.

Ich möchte max. 2 Nachkommastellen im String angezeigt bekommen:
12.00 = "12"
12.10 = "12.1"
12.12 = "12.12"
12.123 = "12.12"

Mit welcher Stringformatierung könnte ich das erreichen?

Viele Grüße
Zuletzt geändert von 101 am 3. Oktober 2009 09:57, insgesamt 1-mal geändert.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

der c-like weg:

Code: Alles auswählen

QString strTest; 
double d = 12.0;
strTest.sprintf("%2.2f",d);
der C++ like Weg:

Code: Alles auswählen

double d = 12.0;
QBuffer buffer;
QTextStream stream(&buffer);
stream.setRealNumberNotation(QTextStream::FixedNotation);
stream.setRealNumberPrecision(2);
stream << d; 
QString myFormatedDoubleString = buffer.buffer().toString();
Ciao ...
101
Beiträge: 72
Registriert: 16. Januar 2008 16:28

Beitrag von 101 »

Mit:

Code: Alles auswählen

QString strTest;
double d = 12.0;
strTest.sprintf("%2.2f",d);
zeigt er immer zwei Nachkommastellen an.
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Beitrag von MichaelS »

das ganze geht auch 'Qt-only':

Code: Alles auswählen

QString formatierterWert=QString( "%1" ).arg( zuFormatierender Wert, 0, 'f',anzahlNachkommaStellen);
Gruß Michael
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Gibt viele Loesungen ... alle haben vor und nachteile ....
zeigt er immer zwei Nachkommastellen an.
das "%2.2f" kannst du natuerlich auch dynamisch (zur laufzeit) erstellen ....

um abschliessende Nullen wegzuküzen, gibt es auch flags ....
Schau Dir die dokumentation zu printf (C) an ... da gibts ne ganze menge mehr möglichkeiten.

Ciao ...
101
Beiträge: 72
Registriert: 16. Januar 2008 16:28

Beitrag von 101 »

Ist zwar ein bisschen eigenwillig, aber so komme ich zu meinen gewünschten Ergebnis:

Code: Alles auswählen

double dTest = 12.348;
qDebug() << "Double mit max. 2 Nachkommastellen: " << QString::number((double)qRound(dTest*100)/100);
Viele Grüße und Danke für die Antworten :)
Antworten