Chris: MySQL verlgiehcn von FLOAT Werten

Hallo da draussen,

ich baue mir eine Query zurecht, komme aber mit den Floatwerten und dem Vergleichen nicht zurecht:

offer.price <= 0.4

Ich möchte gerne alles selecten was < oder = 0.4 ist, leider gottes missachtet MySQL diese Abfrage und ich bekomme einfach kein Resultat geliefert. Die Spalte offer.price ist vom Typ float.

Kann mir jemand verraten wie ich Floatwerte in meine Abfrage einbindnen kann ?

Achjaa, ich nutze PHP und MySQL 4 ;-)

Gruß & danke,

Chris

  1. Hallo

    ich baue mir eine Query zurecht, komme aber mit den Floatwerten und dem Vergleichen nicht zurecht:

    Wie verwendest Du Deine Vergleichsoperatoren in Deinem SQL-Statement?

    offer.price <= 0.4

    wäre in einer WHERE-Klausel korrekt:

    SELECT  
        price  
    FROM offer  
    WHERE price <= 0.4
    

    Ich möchte gerne alles selecten was < oder = 0.4 ist, leider gottes missachtet MySQL diese Abfrage und ich bekomme einfach kein Resultat geliefert. Die Spalte offer.price ist vom Typ float.

    float ist nicht der optimale Datentyp für Preise, da float-Operationen einfachster Art bereits mit Ungenauigkeiten behaftet sind. So ist z.B. 0.1 mit float nicht exakt darstellbar. Nimm doch lieber DECIMAL, siehe Handbuch.

    Achjaa, ich nutze PHP und MySQL 4 ;-)

    Sowohl PHP 4, als auch MySQL 4 sind sehr ungenaue Angaben. PHP 4.4.2 ist weit leistungsfähiger als PHP 4.0.0. Die Unterschiede zwischen MySQL 4.1 und MySQL 4.0 sind ebenfalls gravierend, allerdings beherrscht MySQL auch in Version 4.0 die Vergleichsoperatoren. Es kann nur an Deiner Verwendung liegen.

    Freundliche Grüße

    Vinzenz

    1. Hi,

      danke für deine Hilfe.

      SELECT

      price
      FROM offer
      WHERE price <= 0.4

        
      das ist so korrekt, die Abfrage die ich auführe ist die gleiche wie deine.  
        
      DECIMAL kann ich nicht setzen, in der Datenbank sind bereits Daten und ich weiß nicht wie die Anwendung damit klarkommt. Und eine Umstellung wäre mir im Moment zu riskant.  
        
      Habe folgendes gefunden, werde aber nicht schlau draus:  
        
      http://dev.mysql.com/doc/refman/4.0/de/no-matching-rows.html  
        
      Helfen soll da wohl nur eine Umstellung auf DOUBLE, verstehen tue ich das aber nicht :-) Von FLOAT zu DOUBLE kann ich mir eine Umstellung vorstellen, die vorhanden Daten sollten dadurch nicht verändert werden. Wäre DOUBLE ein geeigneter Kanditat für Preise ?  
        
      Wirst du schlau draus ?  
        
      Auf dem Server läuft MySQL 4.1.12.  
        
      Grüße  
        
      Chris
      
      1. Hi,

        wer lesen kann ist klar im Vorteil :-)

        Habe mir nocheinmal DECIMAL angeschaut, kann ich natürlich setzen, habe es auch gerade ausprobiert und es gefällt mir supi.

        Die SQL Abfrage klappt jetzt auch so wie sie soll.

        Ein Frage hätte ich da aber noch:

        Welchen Wert für DECIMAL würdest du für Preise empfehlen ?

        Ich habe jetzt "10,2" genommen, bin mir aber nicht sicher ob es so ausreichend ist.

        Danke nochmals,

        Chris

        1. Hallo,

          Welchen Wert für DECIMAL würdest du für Preise empfehlen ?

          Ich habe jetzt "10,2" genommen, bin mir aber nicht sicher ob es so ausreichend ist.

          10,2 bedeutet lt. {link:http://dev.mysql.com/doc/refman/4.1/en/numeric-type-overview.html@title=Dokumentation], dass die Werte zwischen -99.999.999,99 und 99.999.999,99 liegen können. Das mag in den meisten Fällen ausreichen, Problematisch wird es dann nur bei Großprojekten oder satten Gewinnen, wenn z.B. mehrere Milliarden im Spiel sind;-)

          Grüße
            Klaus