Warum speichert mein Float in MYSQL als .9999, wenn es größer als 1 ist?

7

Ich speichere Prozesszeit in einer MySQL-Datenbank als float (4,4).

%Vor%

$ process_time wird immer korrekt angezeigt, wenn es an die Befehlszeile ausgegeben wird, aber wenn sein Wert größer als 1 ist, wird es in mysql als .9999 gespeichert.

Was gibt's?

    
T. Brian Jones 11.11.2011, 09:29
quelle

4 Antworten

15

float (4,4) bedeutet insgesamt 4 Ziffern, 4 davon sind nach dem Komma. Sie müssen zum Beispiel auf 10,4 wechseln

  

MySQL erlaubt eine nicht standardisierte Syntax: FLOAT (M, D) oder REAL (M, D) oder DOUBLE PRECISION (M, D). Hier bedeutet "(M, D)", dass Werte mit insgesamt bis zu M Ziffern gespeichert werden können, von denen D nach dem Komma liegen darf.

    
Maxim Krizhanovsky 11.11.2011, 09:32
quelle
7

Auf der Seite MySQL Numerische Typen :

  

MySQL erlaubt eine nicht standardisierte Syntax: FLOAT (M, D) oder REAL (M, D) oder DOUBLE   PRÄZISION (M, D). Hier bedeutet "(M, D)", dass Werte mit up gespeichert werden können   zu M Ziffern insgesamt, von denen D Ziffern nach der Dezimalstelle sein können   Punkt. Zum Beispiel wird eine als FLOAT (7,4) definierte Spalte aussehen   -999.9999 wenn angezeigt. MySQL führt beim Speichern von Werten eine Rundung durch. Wenn Sie also 999.00009 in eine FLOAT (7,4) -Spalte einfügen, wird die ungefähre Zahl angezeigt   Ergebnis ist 999.0001.

float (4,4) bedeutet eine 4-stellige Zahl mit allen 4 Ziffern rechts vom Dezimalpunkt; 0.9999 ist die größte Zahl, die es halten kann.

    
Phil Lello 11.11.2011 09:33
quelle
2

Das liegt an den Werten, die Sie übergeben. Sie lassen 4 Nachkommastellen zu, aber insgesamt nur 4 Stellen, so dass das Maximum, das gespeichert werden kann, 0,9999 ist. Ändern Sie es in float(5,4) , um es korrekt zu speichern, oder erhöhen Sie die 5, wenn Sie der Meinung sind, dass Sie eine noch größere Zahl benötigen.

    
Dave Starling 11.11.2011 09:34
quelle
2

Dies ist nicht direkt eine Antwort auf Ihre Frage, aber Sie sollten keine Floats dafür verwenden. Rundungsfragen sind bekannt für Floats . Verwenden Sie decimal , wenn Sie Präzision wünschen.

    
CodeCaster 11.11.2011 09:34
quelle

Tags und Links