Double auf eine bestimmte Kommazahl beschränken
lima-city → Forum → Programmiersprachen → C/C++ und D
ausgeben
ausgegebene double
code
compiler
double
format
funktion
gefunden code
highlight
http
interpretation
konsole
letzte hoffnung
operator
programm
sagen
stellen
string
umwandeln
zahl
-
Hey ho~
Ich würd mich freuen, wenn mir hier jemand sagen könnte, wie man eine double Variable auf eine bestimmte Kommazahl beschränkt.
Standardmäßig hat ja eine ausgegebene double Zahl 5 Nachkommastellen (glaube ich)
Ich hätte aber gern nur zwei Nachkommastellen, also z.B. 10,34 und nicht 10,34857.
Hab es schon versucht zu googlen und nichts gefunden. Lima ist die letzte Hoffnung ^^ -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Eine Funktion zum runden wie in anderen Sprachen habe ich auch nicht gefunden. Allerdings habe ich eine ähnliche Funktionsdefinierung gefunden:
double Round(double Zahl, unsigned int Stellen) { Zahl *= pow(10, Stellen); if (Zahl >= 0) floor(Zahl + 0.5) else ceil(Zahl - 0.5); Zahl /= pow(10, Stellen); return Zahl; }
von http://www.c-plusplus.de/forum/viewtopic-var-t-is-39342.html -
aero23 schrieb:
du könntestest es formatiert ausgeben
in der konsole mit printf zB
Die Ausgabe bräuchte ich auf einer Oberfläche, also nicht in einer Konsole. Dafür benutze ich den Compiler wxDevC++.
Aber wenn das trotzdem ginge, beschreib doch bitte wie ich es mit printf formatieren könnte ^^
@fly-europe
Die Funktion, die du gepostet hast, wie du schon sagtest, rundet die Zahl und gibt sie ohne Kommastellen aus. Ich bräuchte aber eine mit zwei Nachkommastellen ^^
Oder irre ich mich da in der Interpretation der Funktion? -
Falls du C Programme schreibst:
printf(\"%.2f\",variable);
Falls du C++ Programme schreibst:cout << setprecision(2) << variable;
-
@fly-europe
Die Funktion, die du gepostet hast, wie du schon sagtest, rundet die Zahl und gibt sie ohne Kommastellen aus. Ich bräuchte aber eine mit zwei Nachkommastellen ^^
Oder irre ich mich da in der Interpretation der Funktion?
Du irrst dich. Die Funktion rundet auf die angegebene Anzahl an Stellen. Wenn du z.B. als Stellen 2 eingibst, wird zuerst mit 100 mulitpliziert, dann gerundet und dann durch 100 geteilt, also z.B.:
3,14159 * 100 = 314,159
floor(314,159+0,5) = 314
314 / 100 = 3,14
Die Funktion sollte schon - wenn sie funktioniert - richtig runden (kann leider Syntax nicht überprüfen, weil ich zu wenig Ahnung habe, aber mathematisch ist das einwandfrei)
Beitrag geändert: 8.6.2008 13:49:45 von merovius -
Edit:
setprecision ist leider auch nicht das, was ich gesucht habe,
weil setpresicion mit cout arbeitet.
Ich hingegen arbeite mit einer Oberfläche von wxDevCPP, dort wird cout nicht verwendet.
Beitrag geändert: 9.6.2008 16:21:44 von karikato -
Ich hingegen arbeite mit einer Oberfläche von wxDevCPP, dort wird cout nicht verwendet.
Sag das doch gleich -.-
Wie kommt denn die Zahl in die Oberfläche? Ich nehme mal an sie wird irgendwie in einen String konvertiert und dann in ein Steuerelement geschrieben? Evtl. bietet dir die Konvertierfunktion (im C++-Idealfall eine Methode der String-Klasse) eine Möglichkeit, die Genauigkeit anzugeben?
Schreibst du hingegen C-Programme, ist sprintf() dein Freund ;)
MfG,
thw -
Jaah, hab ich am Anfang leider vergessen zu erwähnen ^^\"
Genau, ich konvertiere die Variable immer in einen String.
Das mach ich allerdings inzwischen immer mit einer Header, die das für mich übernimmt :)
Und ich bin mir nicht ganz sicher, wie ich die Header umschreiben sollte, damit sie nur 2 Nachkommastellen angibt, weil die Header von einem Freund ist (bzw. er hat es auch wohl aus dem Internet)
Hier ist mal die Header, wenn ihr wisst wie man das machen würde, wärs toll, wenn ihr es mir sagen könntet :)
#ifndef CONVERT_H_INCLUDED #define CONVERT_H_INCLUDED //#include <wx/string.h> class Convert { private: public: /*int operator() (const wxString& s) { long lBuffer; s.ToLong(&lBuffer); return static_cast<int>(lBuffer); }*/ double operator() (const wxString& s) { return ToDouble(s); } wxString operator() (int i) { return wxString::Format(wxT(\"%d\"),i); } wxString operator() (double d) { return wxString::Format(wxT(\"%f\"),d); } wxString operator() (const std::string& s) { return wxString(s.c_str()); } //Für wxString zu std::string, siehe: http://wxforum.shadonet.com/viewtopic.php?t=15661&highlight=wxstring+std+string /*std::basic_string<wxChar> operator() (const wxString& s) { std::basic_string<wxChar> stdStr(s); return stdStr; }*/ int ToInt(const wxString& s) { long lBuffer; s.ToLong(&lBuffer); return static_cast<int>(lBuffer); } int ToInt(double d) { return static_cast<int>(d); } double ToDouble(const wxString& s) { double dBuffer; s.ToDouble(&dBuffer); return dBuffer; } }; #endif // CONVERT_H_INCLUDED
-
Du verwendest ja wahrscheinlich den überladenen () Opetrator zum umwandeln, also:
...snip... wxString operator() (double d) { return wxString::Format(wxT(\"%f\"),d); } ...snip
ersetze doch mal wxT(\"%f\") mit wxT(\"%.2f\")
Das ist aber
1) ohne Gewähr das es funktioniert und
2) wirkt es sich auf jede double Variable aus, die du über wxWidgets ausgibst. -
Ohh stimmt .. ausprobiert - gelungen :D
Funktioniert genauso, wie gewollt. Vielen Dank! ^^ -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage