kostenloser Webspace werbefrei: lima-city


Double auf eine bestimmte Kommazahl beschränken

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    karikato

    Kostenloser Webspace von karikato

    karikato hat kostenlosen Webspace.

    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 ^^
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. du könntestest es formatiert ausgeben
    in der konsole mit printf zB
  4. 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
  5. Autor dieses Themas

    karikato

    Kostenloser Webspace von karikato

    karikato hat kostenlosen Webspace.


    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?
  6. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

    Falls du C Programme schreibst:
    printf(\"%.2f\",variable);


    Falls du C++ Programme schreibst:
    cout << setprecision(2) << variable;
  7. m******s


    @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
  8. Autor dieses Themas

    karikato

    Kostenloser Webspace von karikato

    karikato hat kostenlosen Webspace.

    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

  9. 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
  10. Autor dieses Themas

    karikato

    Kostenloser Webspace von karikato

    karikato hat kostenlosen Webspace.

    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

  11. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

    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.
  12. Autor dieses Themas

    karikato

    Kostenloser Webspace von karikato

    karikato hat kostenlosen Webspace.

    Ohh stimmt .. ausprobiert - gelungen :D
    Funktioniert genauso, wie gewollt. Vielen Dank! ^^
  13. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!