Eine kurze Diskussion über die Unterschiede und eine Zusammenfassung der drei Gleitkommatypen Float, Double und Decimal in MySQL

Eine kurze Diskussion über die Unterschiede und eine Zusammenfassung der drei Gleitkommatypen Float, Double und Decimal in MySQL

Die Speichergröße und der Bereich jedes Gleitkommatyps sind in der folgenden Tabelle geplant:

Typ Größe Bereich (signiert) Bereich (ohne Vorzeichen) verwenden
==Fließkomma== 4 Byte (-3,402 823 466 E+38, -1,175 494 351 E-38), 0, (1,175 494 351 E-38, 3,402 823 466 351 E+38) 0, (1,175 494 351 E-38, 3,402 823 466 E+38) Gleitkommawert mit einfacher Genauigkeit
==doppelt== 8 Byte (-1,797 693 134 862 315 7 E+308, -2,225073858507 2014E-308), 0, (2,225 073 858 507 201 4 E-308, 1,797 693 134 862 315 7 E+308) 0, (2,225 073 858 507 201 4 E-308, 1,797 693 134 862 315 7 E+308) Gleitkommawert mit doppelter Genauigkeit
dezimal Für decimal(M,D) gilt: Wenn M>D, ist es M+2, andernfalls ist es D+2 Hängt von den Werten von M und D ab Hängt von den Werten von M und D ab Dezimalwerte

Dies sind also Gleitkommatypen in MySQL. Was sind die Unterschiede zwischen ihnen? ?

  • Der Gleitkommatyp „Float“ wird zur Darstellung von Gleitkommawerten mit einfacher Genauigkeit verwendet.
  • Der Gleitkommatyp „Double“ wird zur Darstellung von Gleitkommawerten mit doppelter Genauigkeit verwendet.

Einige von Ihnen fragen sich hier sicherlich: Was ist einfache Genauigkeit und was ist doppelte Genauigkeit? Werfen wir unten einen kurzen Blick darauf!

Wir wissen, dass ein Byte 8 Bits einnimmt, oder?

Die Länge des Gleitkommatyps Float mit einfacher Genauigkeit beträgt 4 x 8 = 32 Bit. Daher belegt die Gleitkommazahl Float mit einfacher Genauigkeit 4 Byte im Speicher und wird durch 32 Binärbits beschrieben.

Dann ist der Gleitkommatyp mit doppelter doppelter Genauigkeit ==8x8=64 Bit lang==, sodass eine Gleitkommazahl mit doppelter doppelter Genauigkeit 8 Bytes im Speicher einnimmt und mit 64 Bit Binärdarstellung beschrieben wird. Durch Berechnung können 64 Bits mehr Mantissen erhalten!

Mantisse: == ist die Anzahl der Ziffern nach dem Komma ==

Die Genauigkeit hängt hier hauptsächlich von der Anzahl der Ziffern im Teil ==Mantisse== ab. Gemäß dem IEEE-Standard für binäre Gleitkommaarithmetik können wir also Folgendes berechnen und schlussfolgern:

  • Der Gleitkomma-Dezimalteil mit einfacher Genauigkeit kann nur auf die letzten 6 Ziffern plus die Ziffer vor dem Dezimalpunkt genau sein, d. h. die effektive Ziffer beträgt 7 Ziffern
  • Der Dezimalteil mit doppelter Genauigkeit kann auf 15 Dezimalstellen plus die eine signifikante Ziffer vor dem Dezimalpunkt genau sein, also 16 Ziffern.
  • Abschließend wird noch die Länge der Nachkommastellen unterschieden, je länger desto genauer!

Der Unterschied zwischen Double und Float:

  • Die Anzahl der im Speicher belegten Bytes ist unterschiedlich. Der Speicher mit einfacher Genauigkeit belegt 4 Bytes und der Speicher mit doppelter Genauigkeit 8 Bytes.
  • Die Anzahl der signifikanten Stellen ist unterschiedlich (Mantisse): einfache Genauigkeit hat 7 signifikante Stellen nach dem Komma, doppelte Genauigkeit hat 16 signifikante Stellen nach dem Komma
  • Der Zahlenwertbereich ist unterschiedlich. Rechnen Sie nach IEEE-Standards!
  • Die Verarbeitungsgeschwindigkeit ist im Programm unterschiedlich. Im Allgemeinen verarbeitet die CPU Gleitkommazahlen mit einfacher Genauigkeit schneller als Gleitkommazahlen mit doppelter Genauigkeit.

Vor- und Nachteile von Double und Float:

Float Single Precision Vorteile: Float Single Precision ist auf einigen Prozessoren schneller als Double Double Precision und benötigt nur halb so viel Platz wie Double Double Precision. Nachteile: Wenn der Wert jedoch sehr groß oder sehr klein ist, wird er ungenau.

Vorteile der doppelten Genauigkeit: Im Vergleich zu Float ist die doppelte Genauigkeit höher und die Mantisse kann 16 Bit haben, während Float nur eine Mantissengenauigkeit von 7 Bit hat. Nachteile: Die doppelte Genauigkeit verbraucht Speicher und ist doppelt so hoch wie die einfache Genauigkeit von Float! Die doppelte Berechnungsgeschwindigkeit ist viel langsamer als die von Float, da die doppelte Mantisse größer ist als die von Float, sodass die Berechnung teuer sein muss!

So wählen Sie die Verwendungsszenarien von Double und Float aus!

Zunächst einmal: Verwenden Sie keine doppelte Genauigkeit, wenn einfache Genauigkeit verfügbar ist, um Speicher zu sparen und Berechnungen zu beschleunigen!
Float: Wenn Sie einen Dezimalteil benötigen und keine hohe Genauigkeit erfordern, ist es natürlich besser, den Gleitkommatyp Float mit einfacher Genauigkeit zu wählen!
Double: Aufgrund der hohen Genauigkeit der Dezimalstellen wird die doppelte Genauigkeit für schnelle mathematische Berechnungen, wissenschaftliche Berechnungen, Satellitenpositionierungsberechnungen usw. verwendet. Die doppelte Genauigkeit ist auf Prozessoren tatsächlich schneller als die einfache Genauigkeit. Daher gilt: Wenn Sie die Genauigkeit von Berechnungen für mehrere wiederholte Iterationen aufrechterhalten müssen oder wenn Sie mit großen Zahlen arbeiten, ist die doppelte Genauigkeit die beste Wahl.
Dabei geht es eigentlich nur darum, wie viele Ziffern nach dem Komma übrig bleiben!

==Zusammenfassung von Double und Float:==

Float kann weniger Dezimalstellen darstellen, während Double mehr Dezimalstellen darstellen kann und präziser ist! So einfach ist das: Wählen Sie einfach entsprechend Ihrer Situation!

Was stellen die Längen m und d nach Double und Float dar?

double(m,d) und float(m,d) Was stellen m und d hier dar? Viele von Ihnen sind auch verwirrt! Lassen Sie es mich erklären. Wie die Ganzzahl int(n) oben haben auch diese Typen zusätzliche Parameter: eine Anzeigebreite m und eine Anzahl von Ziffern nach dem Dezimalpunkt d.
Beispiel: Die Anweisung float(7,3) gibt an, dass der angezeigte Wert nicht länger als 7 Ziffern sein darf, mit 3 Ziffern nach dem Komma. Dasselbe gilt für double. In MySQL können beim Definieren von Tabellenfeldern die Modifikatoren unsigned und zerofill auch mit den Datentypen float, double und decimal verwendet werden, und die Wirkung ist dieselbe wie beim Datentyp int. Ich werde hier nicht ins Detail gehen!

==Zusammenfassung:==

In MySQL-Anweisungen, wenn Tabellenfelder tatsächlich definiert werden,
float(M,D) unsigned Das M darin steht für die Anzahl der verwendbaren Ziffern und D für die Anzahl der Dezimalstellen nach dem Komma. Unsigned bedeutet, dass negative Zahlen nicht erlaubt sind!
double(M,D) unsigned Das M darin steht für die Anzahl der verwendbaren Ziffern und D für die Anzahl der Dezimalstellen nach dem Komma.
==Hinweis:== M>=D!

Dezimaltyp

==1. Einführung in Dezimalzahlen==
Beim Speichern von Werten im gleichen Bereich wird normalerweise weniger Speicherplatz als bei Dezimalzahlen benötigt. Bei Float werden 4 Bytes zum Speichern benötigt und bei Double 8 Bytes.
Dezimalzahlen hängen von den Werten von M und D ab, sodass Dezimalzahlen weniger Platz beanspruchen. Bei der tatsächlichen Entwicklung auf Unternehmensebene stoßen wir häufig auf Felder, in denen Beträge gespeichert werden müssen (3888,00 Yuan). Zu diesem Zeitpunkt müssen wir den Datentyp Dezimalzahlen verwenden.
In der MySQL-Datenbank lautet die Syntax für Dezimalzahlen: decimal(M,D), wobei:
Der Bereich von M beträgt 165,
Der Bereich von D ist 030,
Und D kann nicht größer als M sein.

==2. Maximalwert==
Was ist der maximale Wert/Bereich, der in einem Feld mit einem Dezimaldatentyp gespeichert werden kann?
Beispiel: Dezimalzahl (5,2). Das Feld kann -999,99 bis 999,99 speichern, mit einem Maximalwert von 999,99.
Das heißt, D stellt die Länge des Dezimalteils dar und (MD) die Länge des ganzzahligen Teils.
==3. Speicher== [Verstehen]
Das Datenspeicherformat des Dezimaltyps besteht darin, jeweils 9 Dezimalstellen als 4 Bytes zu speichern (offizielle Erklärung: Werte für DECIMAL-Spalten werden in einem Binärformat gespeichert, das neun Dezimalstellen in 4 Bytes packt).
Es ist möglich, dass die Anzahl der eingestellten Ziffern kein Vielfaches von 9 ist. Der Beamte stellt zum Vergleich auch folgende Tabelle zur Verfügung:

Übrig gebliebene Ziffern Anzahl der Bytes
0 0
1–2 1
3–4 2
5–6 3
7–9 4

==Was bedeutet die Tabelle? Zum Beispiel: ==
1. Feld Dezimalzahl (18,9), 18-9 = 9, also sind sowohl der ganzzahlige Teil als auch der Dezimalteil 9 und jede Seite belegt 4 Bytes.
2. Feld decimal(20,6), 20-6=14, wobei der Dezimalteil 6 ist, was 3 Bytes in der obigen Tabelle entspricht, und der ganzzahlige Teil 14 ist, 14-9=5, was 4 Bytes plus 3 Bytes in der Tabelle entspricht. Wenn wir also Dezimalzahlen festlegen, verwenden wir normalerweise den Dezimaltyp!!

Kleiner Koffer 1

mysql> Tabelle temp2 löschen;
Abfrage OK, 0 Zeilen betroffen (0,15 Sek.)

mysql> Tabelle temp2 erstellen (id float(10,2), id2 double(10,2), id3 decimal(10,2));
Abfrage OK, 0 Zeilen betroffen (0,18 Sek.)

mysql> in temp2 Werte einfügen(1234567.21, 1234567.21,1234567.21),(9876543.21, 
  -> 9876543.12, 9876543.12);
Abfrage OK, 2 Zeilen betroffen (0,06 Sek.)
Datensätze: 2 Duplikate: 0 Warnungen: 0

mysql> wähle * aus temp2;
+------------+------------+------------+
| Ich würde | Ich würde2 | Ich würde3 |
+------------+------------+------------+
| 1234567,25 | 1234567,21 | 1234567,21 |
| 9876543.00 | 9876543.12 | 9876543.12 |
+------------+------------+------------+
2 Zeilen im Satz (0,01 Sek.)

mysql> Beschreibung temp2;
+----------+---------------+------+-----+---------+---------+----------+
| Feld | Typ | Null | Schlüssel | Standard | Extra |
+----------+---------------+------+-----+---------+---------+----------+
| Ich würde | float(10,2) | JA | | NULL | |
| id2 | double(10,2) | JA | | NULL | |
| id3 | Dezimalzahl (10,2) | JA | | NULL | |
+----------+---------------+------+-----+---------+---------+----------+
3 Zeilen im Satz (0,01 Sek.)

Kleiner Koffer 2

mysql> Tabelle temp2 löschen;
Abfrage OK, 0 Zeilen betroffen (0,16 Sek.)

mysql> Tabelle temp2 erstellen (id double, id2 double);
Abfrage OK, 0 Zeilen betroffen (0,09 Sek.)

mysql> in temp2-Werte einfügen (1,235,1,235);
FEHLER 1136 (21S01): Die Spaltenanzahl stimmt nicht mit der Werteanzahl in Zeile 1 überein
mysql> in temp2-Werte einfügen (1,235,1,235);
Abfrage OK, 1 Zeile betroffen (0,03 Sek.)

MySQL> 
mysql> wähle * aus temp2;
+----------+--------+
| Ich würde | Ich würde2 |
+----------+--------+
| 1,235 | 1,235 |
+----------+--------+
1 Zeile im Satz (0,00 Sek.)

mysql> in temp2-Werte (3,3,4,4) einfügen;
Abfrage OK, 1 Zeile betroffen (0,09 Sek.)

mysql> wähle * aus temp2;
+----------+--------+
| Ich würde | Ich würde2 |
+----------+--------+
| 1,235 | 1,235 |
| 3,3 | 4,4 |
+----------+--------+
2 Zeilen im Satz (0,00 Sek.)

mysql> wähle id-id2 aus temp2;
+---------------------+
|ID-ID2|
+---------------------+
| 0 |
|-1,1000000000000005 |
+---------------------+
2 Zeilen im Satz (0,00 Sek.)

mysql> Tabelle temp2 ändern, ID dezimal (10,5) ändern;
Abfrage OK, 2 Zeilen betroffen (0,28 Sek.)
Datensätze: 2 Duplikate: 0 Warnungen: 0

mysql> Tabelle temp2 ändern, ID2 ändern, Dezimalzahl (10,5);
Abfrage OK, 2 Zeilen betroffen (0,15 Sek.)
Datensätze: 2 Duplikate: 0 Warnungen: 0

mysql> wähle * aus temp2;
+---------+---------+
| Ich würde | Ich würde2 |
+---------+---------+
| 1,23500 | 1,23500 |
| 3,30000 | 4,40000 |
+---------+---------+
2 Zeilen im Satz (0,00 Sek.)

mysql> wähle id-id2 aus temp2;
+----------+
|ID-ID2|
+----------+
| 0,00000 |
|-1,10000 |
+----------+
2 Zeilen im Satz (0,00 Sek.)


Damit ist dieser Artikel über die Unterschiede und die Zusammenfassung der drei Gleitkommatypen Float, Double und Decimal in MySQL abgeschlossen. Weitere relevante MySQL-Inhalte zu Float, Double und Decimal finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung des Dezimal-Padding-Problems des Dezimal-Datentyps in MySQL
  • MySQL Dezimalzahl unsigned Update negative Zahlen in 0 umgewandelt
  • Detaillierte Analyse des MySQL-Datentyps DECIMAL
  • Eine kurze Einführung in die Verwendung des Dezimaltyps in MySQL
  • Detaillierte Erklärung der Bedeutung von N und M im MySQL-Datentyp DECIMAL(N,M)
  • Detaillierte Erklärung der Verwendung von DECIMAL im MySQL-Datentyp
  • Der Unterschied zwischen dem Dezimaltyp und dem Float Double in MySQL (ausführliche Erklärung)
  • Detaillierte Erklärung zur Verwendung des MySQL-Datentyps DECIMAL

<<:  5 JavaScript-Möglichkeiten zum Abflachen von Arrays

>>:  So betreten und verlassen Sie den Docker-Container

Artikel empfehlen

Implementierung von Socket-Optionen in der Linux-Netzwerkprogrammierung

Socket-Optionsfunktion Funktion: Methoden zum Les...

Vue + Element + OSS realisiert das Hochladen von Front-End-Fragmenten und die Wiederaufnahme von Haltepunkten

Reine Front-End-Implementierung:切片上傳斷點續傳.斷點續傳muss...

JS implementiert das Schlangenspiel

Inhaltsverzeichnis 1. Initialisierungsstruktur 2....

10 beliebte Windows-Apps, die auch unter Linux verfügbar sind

Laut dem Datenanalyseunternehmen Net Market Share...

Hinweise zum Zeichengerätetreiber des Linux-Kernel-Gerätetreibers

/******************** * Zeichengerätetreiber*****...

Was Sie über Filter in Vue wissen müssen

Inhaltsverzeichnis Vorwort Was ist ein Filter So ...

So überwachen Sie Oracle-Datenbanken mit Zabbix Agent2

Überblick In Zabbix Version 5.0 und höher wurde e...

4 Möglichkeiten zur Implementierung von Routing-Übergangseffekten in Vue

Vue-Router-Übergänge sind eine schnelle und einfa...

Verwenden von Vue zum Implementieren einer Timerfunktion

In diesem Artikelbeispiel wird der spezifische Co...

Springboot+VUE zur Realisierung von Anmeldung und Registrierung

In diesem Artikelbeispiel wird der spezifische Co...

Implementierungscode zum Betreiben einer MySQL-Datenbank in Golang

Vorwort Golang stellt das Datenbank-/SQL-Paket fü...

js Implementierung des Verifizierungscode-Falls

In diesem Artikelbeispiel wird der spezifische Co...