Mysql: Rundungsfehler bei berechneten Spalten?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Mysql: Rundungsfehler bei berechneten Spalten?

    Hallo,
    beim Versuch eine einfache Zinsberechnung zu erstellen ist mir ein Rundungsfehler bei berechneten Spalten in MySQL 5.0.26 aufgefallen:

    Code:
    SELECT
    ID,
    zinssatz,
    100 * (zinssatz/ 100) * (360 / 360) AS zinsen
    FROM
    zinstabelle
    ORDER BY zinsen DESC
    Man sollte nun annehmen, das bei diesen Werte dann zinsen = zinssatz sein dürften, aber nein:

    Code:
    ID	zinssatz	zinsen
    14061	10	        10
    12531	9,53	        9.5299997329712
    12417	9	        9
    13993	9	        9
    13994	7	        7
    10250	5,98	        5.9800000190735
    10321	5,98	        5.9800000190735
    14520	5,9	        5.9000000953674
    Ein einfaches Runden würde das zumindest optisch wieder hinbiegen, aber wirklich richtig wird das Ergebnis dadurch nicht.

    Die Spalte "zinssatz" ist als float angelegt.

    Über Hinweise was da falsch läuft wäre ich dankbar. Muss ich ggf. die Zinsberechnung dann doch in das PHP-Skript verlegen?

    Danke,
    Markus

  • #2
    Code:
    ID	zinssatz	zinsen
    12531	9,53	        9.5299997329712
    mich irritiert das Komma da!
    Wir werden alle sterben

    Kommentar


    • #3
      Zitat von combie Beitrag anzeigen
      mich irritiert das Komma da!
      Hm, Navicat zeigt mir die Spalte aber brav als "float" an (`zinssatz` float DEFAULT NULL,). In der Tabelle selber sind die Daten dann auch tatsächlich mit Komma zu sehen.

      Kommentar


      • #4
        Warum ist das ein FLOAT-Wert? Bei Werten, die mit Geld zu tun haben, niemals FLOAT verwenden. DECIMAL ist dafür besser geeignet.

        Kommentar


        • #5
          Zitat von h3ll Beitrag anzeigen
          Warum ist das ein FLOAT-Wert? Bei Werten, die mit Geld zu tun haben, niemals FLOAT verwenden. DECIMAL ist dafür besser geeignet.
          Danke, mit DECIMAL stimmt das Ergebniss dann auch.

          Trotzdem wundert es mich das bei "100 * (Wert / 100)" am Ende nicht Wert herauskommt. Eignet sich Float generell nicht für Berechnungen? (ich stelle mir gerade jene Raumsonde vor, die wg. eines Umrechnungsfehler verloren gegangen ist ).

          Kommentar


          • #6
            Wo die leichten Ungenauigkeiten her hommen?
            Lese hier PHP: Fliekommazahlen - Manual mal die Warnung zu Float.
            Für MySQL gilt das natürlich genau so.
            Wir werden alle sterben

            Kommentar


            • #7
              Wunderbar!

              Ich bedanke mich für die Antworten... und würde den Thread ja gerne als "Gelöst" markieren (lassen).

              Kommentar

              Lädt...
              X