MYSQL SUM() Abfrage "falsches Ergebnis" bei Kommazahlen

  • Moin,

    vielleicht kann mir hier jemand helfen.

    Habe ein kleines Problem mit MySQL

    Ich habe Zahlen mit maximal zwei Nachkommastellen.

    Das ganze habe ich in einem Feld mit dem Typ "float" gespeichert. (Vielleicht liegt hier schon der Fehler?)

    Wenn ich jetzt hier ne normale Abfrage mache kommen die richtigen Werte z.B. 22.22 und 25 usw.

    Wenn ich diese mit SUM() Abfrage und einem GROUP BY mache, dann rechnet er die Zahlen ohne Komma richtig aber wenn in einer Abfrage z.B die .22 hinten steht dann kommt als Ergebnis hinter dem Komma so was raus .219999313354 was ja nicht ganz .22 entspricht.

    Hier mal die SQL Abfrage im PHP.

    Gruß isten

    SB50 Champion Anderson Barrett Brenner Brewer Bush Caldwell Colquitt Daniels T.Davis V.Davis Doss Ferentz Fowler Garcia Green C.Harris R.Harris Hillman Jackson Keo Kilgo Latimer Manning Marshall Mathis McCray McManus Miller Myers Nelson Nixon Norwood Osweiler Paradis Polumbus Ray Roby Sanders Schofield Siemian Smith Stewart Talib Thomas Thompson Trevathan Vasquez Walker Ward Ware Webster S.Williams Wolfe Anunike Bolden Bruton Clady Heuerman Sambrailo K.Williams

  • Ich kenne MySQL nicht wirklich gut, habe deshalb keine Ahnung davon, welche Funktionen zur Verfügung stehen. Aber kann es evtl. so gehen:

    Code
    $sqlquery = "SELECT
      SUM(ROUND(S.Summe,2)) AS Betrag,
    .
    .
    .

    ?

  • okay danke macht natürlich Sinn das ganze einfach nur noch zu runden :rolleyes:

    Manchmal kann es so einfach sein.

    Was ich nur nicht verstehe das MySQL bei einer Abfrage ohne SUM die Komma Zahlen "richtig" ausgibt, und bei SUM nicht. Vielleicht rundet er von sich aus wenn man sum weg lässt bei ner float. :madness

    Gruß isten

    SB50 Champion Anderson Barrett Brenner Brewer Bush Caldwell Colquitt Daniels T.Davis V.Davis Doss Ferentz Fowler Garcia Green C.Harris R.Harris Hillman Jackson Keo Kilgo Latimer Manning Marshall Mathis McCray McManus Miller Myers Nelson Nixon Norwood Osweiler Paradis Polumbus Ray Roby Sanders Schofield Siemian Smith Stewart Talib Thomas Thompson Trevathan Vasquez Walker Ward Ware Webster S.Williams Wolfe Anunike Bolden Bruton Clady Heuerman Sambrailo K.Williams

  • Sieht für mich so aus als ob er bei der Summierung intern auf Double umsteigt. Dabei können genau solche Effekte entstehen.

    Auf Double umsteigen könnte das Problem lösen, am besten nimmst du aber einen Datentyp mit fester Anzahl Nachkommastellen, also DECIMAL(n,2).

  • DECIMAL(n,2)

    klingt gut, kannte ich gar nicht. Aber das wäre dann ja wahrscheinlich genau das was ich brauche. Mal schauen ob noch alles läuft wenn ich es umwandele

    Gruß isten

    SB50 Champion Anderson Barrett Brenner Brewer Bush Caldwell Colquitt Daniels T.Davis V.Davis Doss Ferentz Fowler Garcia Green C.Harris R.Harris Hillman Jackson Keo Kilgo Latimer Manning Marshall Mathis McCray McManus Miller Myers Nelson Nixon Norwood Osweiler Paradis Polumbus Ray Roby Sanders Schofield Siemian Smith Stewart Talib Thomas Thompson Trevathan Vasquez Walker Ward Ware Webster S.Williams Wolfe Anunike Bolden Bruton Clady Heuerman Sambrailo K.Williams

  • Ja, DECIMAL ist das, was Du brauchst. Bei Float und Double wirst Du immer wieder dieses Problem haben, da es technisch im Regelfall nicht möglich ist, Fließkommazahlen exakt abzuspeichern. (Falls es Dich interessiert: schau Dir die IEEE-754-Norm dazu an.) Wenn Du dann noch arithmetische Operationen darauf anwendest, potenziert sich dieses Problem irgendwann.