it-swarm.com.de

Für die Speicherung statistischer Daten benötige ich DECIMAL, FLOAT oder DOUBLE?

Ich schreibe zum Spaß, möchte mich aber dennoch ernsthaft damit befassen, eine Website, auf der verschiedene Tests durchgeführt werden. Mit diesen Tests möchte ich statistische Daten sammeln.

Einige der Daten enthalten den Prozentsatz der Vollständigkeit der Tests, wenn sie zeitgesteuert sind. Ich kann den Prozentsatz der Tests leicht berechnen, aber ich möchte, dass echte Daten zurückgegeben werden, wenn ich die verschiedenen verschiedenen Werte der Tests nach Abschluss speichere.

Die meisten Werte sind in Floaten von PHP. Meine Frage ist also, ob ich wirklich statistische Daten erhalten möchte, sollte ich sie in MYSQL als FLOAT, DOUBLE oder DECIMAL speichern. 

Ich möchte die Funktionen von MYSQL wie AVG() und LOG10() sowie TRUNCATE() verwenden. Für MySQL, um echte Daten basierend auf meinen von mir eingegebenen Werten zurückzugeben, was sollte ich als Datenbankspaltenauswahl verwenden.

Ich frage, weil einige Zahlen möglicherweise Floats wie 10, 10.89, 99.09 oder einfach 0 ..__ sind oder nicht, aber ich möchte, dass wahre und gültige statistische Daten zurückgegeben werden.

Kann ich mich dabei auf Fließkomma-Mathematik verlassen?

EDIT

Ich weiß, dass dies eine generische Frage ist, und ich entschuldige mich ausführlich, aber für Nicht-Mathematiker wie ich bin ich auch kein MYSQL-Experte. Ich hätte gerne die Meinung eines Experten auf diesem Gebiet.

Ich habe meine Nachforschungen angestellt, fühle mich aber immer noch mit einem trüben Urteil über die Sache. Nochmals entschuldige ich mich, wenn meine Frage nicht zum Thema passt oder nicht für diese Site geeignet ist.

57
PEPLOVE

Dieses link erklärt gut, wonach Sie suchen. Hier ist, was sagt:

Alle diese drei Typen können durch die folgenden Parameter (Größe, d) angegeben werden. Dabei ist size die Gesamtgröße des Strings und d die Genauigkeit. Z. B. um eine Zahl wie 1234.567 zu speichern, setzen Sie den Datentyp auf DOUBLE (7, 3), wobei 7 die Gesamtzahl der Ziffern und 3 die Anzahl der Ziffern ist, die dem Dezimalzeichen folgen sollen.

FLOAT und DOUBLE repräsentieren beide Fließkommazahlen. Ein FLOAT steht für einfache Genauigkeit, ein DOUBLE für Zahlen mit doppelter Genauigkeit. Eine Genauigkeit von 0 bis 23 führt zu einer 4-Byte-FLOAT-Spalte mit einfacher Genauigkeit. Eine Genauigkeit von 24 bis 53 führt zu einer DOUBLE-Spalte mit 8 Bytes und doppelter Genauigkeit. FLOAT ist auf ungefähr 7 Dezimalstellen genau und DOUBLE auf 14 genau.

Decimals Deklaration und Funktionsweise ähnelt der von Double. Es gibt jedoch einen großen Unterschied zwischen Fließkommawerten und Dezimalwerten (numerisch). Wir verwenden den DECIMAL-Datentyp, um genaue numerische Werte zu speichern, bei denen wir keine Genauigkeit, sondern exakte und genaue Werte wünschen. Ein Dezimaltyp kann maximal 65 Stellen und 30 Stellen hinter dem Dezimalpunkt speichern.

Für den genauesten und genauesten Wert wäre Dezimalwert die beste Option.

72
Linger

Sofern Sie keine Dezimaldaten speichern (d. H. Währung), sollten Sie einen Standard-Gleitkommatyp (FLOAT oder DOUBLE) verwenden. DECIMAL ist ein Festkomma-Typ, der beim Berechnen von Dingen wie SUM überlaufen kann und für LOG10 lächerlich ungenau ist.

Es gibt nichts "weniger genau" für binäre Fließkommatypen. Sie werden in der Tat viel genauer (und schneller) für Ihre Anforderungen sein. Gehen Sie mit DOUBLE.

5
Simon Byrne

Einfach ausgedrückt: Float und Double sind nicht so genau wie Dezimalzahlen. Für die Eingabe der geldbezogenen Zahlen wird eine Dezimalzahl empfohlen. (Währung und Gehalt) . Ein weiterer Punkt, auf den hingewiesen werden muss, ist: Vergleichen Sie die Float-Nummer NICHT mit "=", "<>", da Float-Nummern nicht genau sind. 

5
waterinusa

Dezimal: Festkomma-Typen (genauer -Wert). Verwenden Sie es, wenn Sie auf Genauigkeit wie Geld Wert legen. 

Beispiel: salary DECIMAL(8,2), 8 ist die Gesamtzahl der Stellen, 2 die Anzahl der Dezimalstellen. salary liegt im Bereich von -999999.99 bis 999999.99


Float, Double: Gleitkommatypen (Ungefährer -Wert). Float verwendet 4 Bytes zur Darstellung von Werten, Double verwendet 8 Bytes zur Darstellung von Werten.

Beispiel: percentage FLOAT(5,2), gleich wie der Typ decimal, 5 ist die Gesamtzahl und 2 die Dezimalstelle. percentage speichert Werte zwischen -999.99 bis 999.99.

Beachten Sie, dass es sich um einen ungefähren-Wert handelt, in diesem Fall:

  • Ein Wert wie 1 / 3.0 = 0.3333333... wird als 0.33 (2 Dezimalstellen) gespeichert.
  • Ein Wert wie 33.009 wird als 33.01 gespeichert (auf 2 Dezimalstellen gerundet).
3
Timeless

Linger: Die Website, die Sie erwähnen und zitieren, hat IMO einige unpräzise Informationen, die mich verwirrt haben. In den Dokumenten habe ich gelesen, dass der Dezimalpunkt in der Zahl NICHT enthalten ist, wenn Sie ein Float oder ein Double deklarieren. Es ist also nicht die Anzahl der Zeichen in einer Zeichenfolge, sondern alle verwendeten Ziffern.

Vergleichen Sie die Dokumente: "DOUBLE PRÄZISION (M, D) .. Hier bedeutet" (M, D) ", dass Werte mit insgesamt bis zu M Ziffern gespeichert werden können, von denen D-Ziffern nach dem Dezimalzeichen liegen können Eine als FLOAT (7,4) definierte Spalte sieht beispielsweise wie folgt aus: -999.9999, wenn " http://dev.mysql.com/doc/refman/5.1/de/floating-point-types angezeigt wird .html

Auch die Nomenklatur ist irreführend - nach docs: M steht für "Präzision" und D steht für "Maßstab", wohingegen die Website "Maßstab" für "Präzision" verwendet.

Ich dachte, es wäre nützlich für den Fall, dass jdm wie ich ein Bild machen wollte. Korrigieren Sie mich, wenn ich falsch liege. Ich hoffe, ich habe einige veraltete Dokumente nicht gelesen :)

1
Joey

Float und Double sind Fließkomma-Datentypen. Das bedeutet, dass die von ihnen gespeicherten Zahlen nur bis zu einer bestimmten Anzahl von Ziffern genau sein können. Wenn Sie beispielsweise für eine Tabelle mit Float-Typ eine Spalte mit 7.6543219 speichern, wird sie als 7.65432..__ gespeichert. In ähnlicher Weise approximiert der Datentyp Double Werte, er hat jedoch eine höhere Genauigkeit als Float.

Beim Erstellen einer Tabelle mit einer Spalte mit dem Datentyp Decimal geben Sie die Gesamtzahl der Ziffern und die Anzahl der Dezimalstellen an, die gespeichert werden sollen. Wenn sich die von Ihnen gespeicherte Zahl innerhalb des von Ihnen angegebenen Bereichs befindet, wird sie genau gespeichert.

Wenn Sie genaue Werte speichern möchten, ist Decimal der Weg, der als fester Datentyp bezeichnet wird.

0
Daksh