Heim  >  Artikel  >  Datenbank  >  Fassen Sie die Unterschiede zwischen Float-, Double- und Decimal-Gleitkommatypen in MySQL zusammen

Fassen Sie die Unterschiede zwischen Float-, Double- und Decimal-Gleitkommatypen in MySQL zusammen

coldplay.xixi
coldplay.xixinach vorne
2020-11-19 17:13:0713093Durchsuche

MySQL-Video-TutorialDie Spalte fasst die Unterschiede zwischen den drei Gleitkommatypen in MySQL zusammen

Fassen Sie die Unterschiede zwischen Float-, Double- und Decimal-Gleitkommatypen in MySQL zusammen

Die Speichergröße und der Speicherbereich jedes Gleitkommatyps sind in der folgenden Tabelle aufgeführt:

8 Bytes(-1.797 693 134 862 315 7 E+308, -2.225073858507 2014E-308), 0, (2.225 073 858 507 201 4. E-3 08, 1.79 7 693 134 862 315 7 E+308)
Typ: Größe: Bereich (mit Vorzeichen): Bereich (ohne Vorzeichen) 75 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 ==double==
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 dezimal(M, D) Wenn M>

Diese drei Typen in MySQL sind also alle Gleitkommatypen. Was sind die Unterschiede zwischen ihnen? ?

  1. Float-Gleitkommatyp wird verwendet, um == Gleitkomma mit einfacher Genauigkeit == numerischen Wert darzustellen,
  2. Doppelter Gleitkommatyp wird verwendet, um == Gleitkomma mit doppelter Genauigkeit == numerischen Wert darzustellen

<code><strong>这里肯定有些小伙伴要问了  什么是单精度 什么是双精度 ? 下面我们就来简单了解一下吧!</strong>

我们知道一个bytes(字节) 占8位 对吧!

float单精度 存储浮点类型的话 就是 ==4x8=32位的长度==  , 所以float单精度浮点数在内存中占 4 个字节,并且用 32 位二进制进行描述

那么 double双精度 存储浮点类型就是 ==8x8 =64位的长度==,  所以double双精度浮点数在内存中占 8 个字节,并且用 64 位二进制进行描述  通过计算、那么64位就可以获得更多的尾数!

尾数 : ==就是小数点后的有多少个数位==

所以这里的精度主要取决于==尾数==部分的位数, 所以根据IEEE二进制浮点数算术标准 来计算得出结论:

float单精度小数部分只能精确到后面6位,加上小数点前的一位,即有效数字为7位

double双精度小数部分能精确到小数点后的15位,加上小数点前的一位 有效位数为16位。

最后就区别出了小数点后边位数的长度,越长越精确!

double 和 float 彼此的区别:

  1. 在内存中占有的字节数不同, 单精度内存占4个字节,  双精度内存占8个字节
  2. 有效数字位数不同(尾数)  单精度小数点后有效位数7位,  双精度小数点后有效位数16位
  3. 数值取值范围不同  根据IEEE标准来计算!
  4. 在程序中处理速度不同,一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快

double 和 float 彼此的优缺点:

float单精度

优点: float单精度在一些处理器上比double双精度更快而且只占用double双精度一半的空间

缺点: 但是当值很大或很小的时候,它将变得不精确。

double双精度 Hier muss etwas Kleines sein. Mein Freund möchte fragen, was einfache Präzision und was doppelte Präzision ist. Werfen wir einen kurzen Blick darauf!

Wir wissen, dass ein Byte (Byte) 8 Bits belegt, richtig!

Float-Gleitkomma-Speichertyp mit einfacher Genauigkeit ist ==4x8=32-Bit-Länge= = , sodass die Float-Gleitkommazahl mit einfacher Genauigkeit 4 Bytes im Speicher belegt und in 32-Bit-Binärform beschrieben wird

Dann ist der Speicher-Gleitkommatyp mit doppelter Genauigkeit ==8x8 =64-Bit-Länge==, Die Gleitkommazahlen mit doppelter Genauigkeit belegen also 8 Bytes im Speicher und werden mit 64-Bit-Binärzahlen beschrieben. Durch Berechnung können 64 Bits mehr Mantissen erhalten!

Mantisse

: ==Dies ist die Anzahl der Nachkommastellen ==

Die Genauigkeit hängt hier also hauptsächlich von der Anzahl der Ziffern im Teil ==mantisse== ab,

Nach dem IEEE-Standard für binäre Gleitkomma-Arithmetik

wird also die Schlussfolgerung gezogen:

Der Single- Der Präzisions-Dezimalteil von Float kann nur bis zu den hinteren 6 Stellen plus einer Stelle vor dem Komma genau sein, d. h. der 7-stellige Dezimalteil kann bis zu 15 Stellen nach dem Komma plus einer Stelle genau sein Vor dem Dezimalpunkt beträgt die Anzahl der signifikanten Stellen 16 Stellen.

Abschließend wird 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 , Speicher mit einfacher Genauigkeit belegt 4 Bytes, Speicher mit doppelter Genauigkeit belegt 8 Bytes Der Wertebereich ist unterschiedlich. Berechnet nach IEEE-Standards.

Die Verarbeitungsgeschwindigkeit im Programm ist unterschiedlich. Im Allgemeinen verarbeitet die CPU Gleitkommazahlen mit einfacher Genauigkeit schneller als Gleitkommazahlen mit doppelter Genauigkeit haben die Vor- und Nachteile voneinander:

float single precision

Vorteile: float single precision ist auf einigen Prozessoren schneller als double precision und nimmt nur die Hälfte des Platzes von double double precision ein

Nachteile: Wenn der Wert jedoch sehr groß oder klein ist, wird er ungenau.

double double precision

Vorteile: Im Vergleich zu double und float muss die Mantisse eine höhere Genauigkeit haben, während float nur 7 Stellen an Mantissengenauigkeit hat Verbraucht Speicher und ist doppelt so präzise wie Float! Die Operationsgeschwindigkeit von Double ist viel langsamer als die von Float, da Double mehr Mantissen als Float hat Double- und Float-Szenario!

Zuallererst: Verwenden Sie keine doppelte Genauigkeit, wenn Sie einfache Genauigkeit verwenden können, um Speicher zu sparen und Vorgänge zu beschleunigen!

float: Natürlich, wenn Sie den Dezimalteil benötigen und keine hohe Genauigkeit haben Anforderungen: Wählen Sie „Float“ für den Gleitkommavergleich mit einfacher Genauigkeit Der Typ auf dem Prozessor ist tatsächlich schneller als der Typ mit einfacher Genauigkeit. Wenn Sie also Folgendes benötigen: Doppelte Präzision ist die beste Wahl, wenn Sie die Genauigkeit über viele Iterationen hinweg beibehalten oder mit sehr großen Zahlen arbeiten möchten. So viel ist eigentlich eine Frage, wie viele Stellen nach dem Dezimalpunkt übrig bleiben

== Zusammenfassung von Double und Float:==

Float steht für weniger Dezimalstellen, während Double mehr Dezimalstellen darstellen kann, was mehr ist! genau! Es ist so einfach wie die Auswahl entsprechend der Situation!

Was bedeuten die Längen m und d hinter double und float? 🎜🎜🎜double(m,d) und float(m,d) Was bedeuten m und d hier? Was? Viele Freunde sind auch unklar! Lassen Sie mich weiter erklären🎜🎜Tatsächlich haben diese Typen wie die vorherige Ganzzahl int(n) auch zusätzliche Parameter: eine Anzeigebreite m und eine Zahl d nach dem Komma 🎜🎜Zum Beispiel: Die Die Anweisung float (7,3) legt fest, dass der angezeigte Wert 7 Ziffern mit 3 Ziffern nach dem Komma nicht überschreitet. Das Gleiche gilt für Double 🎜🎜In MySQL können beim Definieren von Tabellenfeldern auch Modifikatoren ohne Vorzeichen und Nullfüllung verwendet werden Wird von den Datentypen float, double und decimal verwendet und hat den gleichen Effekt wie oben, ich werde hier nicht auf Details eingehen!🎜🎜==Zusammenfassung:==🎜🎜In der MySQL-Anweisung: Die Tabellenfelder sind tatsächlich definiert. Wenn M in 🎜🎜float(M,D) ohne Vorzeichen die Anzahl der Ziffern darstellt, die verwendet werden können, stellt D die Anzahl der Dezimalstellen nach dem Komma dar, ohne Vorzeichen bedeutet, dass negative Zahlen nicht zulässig sind 🎜 🎜double(M,D) in unsigned Das M stellt die Anzahl der Ziffern dar, die verwendet werden können, und D stellt die Anzahl der Dezimalstellen nach dem Dezimalpunkt dar🎜🎜==Hinweis:== M>=D!🎜🎜🎜dezimal Typ 🎜🎜🎜 == 1. Einführung in Dezimalzahl == 🎜🎜 Beim Speichern von Werten im gleichen Bereich werden normalerweise 4 Bytes für die Speicherung verwendet, und Double verwendet 8 Bytes 🎜🎜 hängt von den Werten von M und D ab, daher benötigt die Dezimalzahl weniger Platz 🎜

In der tatsächlichen Entwicklung auf Unternehmensebene stoßen wir häufig auf Felder, in denen der Betrag (3888,00 Yuan) gespeichert werden muss. Zu diesem Zeitpunkt müssen wir den Datentyp „Dezimal“ verwenden. In der MySQL-Datenbank lautet die Syntax für die Verwendung von Dezimalzahlen: dezimal(M,D), wobei Der Bereich von M beträgt 165, Der Bereich von D beträgt 030, Und D kann nicht größer als M sein.

==2.Maximalwert==

Ein Feld mit Datentyp „Dezimal“. Was ist der maximale Wert/Bereich, der gespeichert werden kann? Beispiel: dezimal (5,2), dieses Feld kann -999,99 bis 999,99 speichern und der Maximalwert beträgt 999,99. Das heißt, D repräsentiert die Länge des Dezimalteils und (M-D) repräsentiert die Länge des ganzzahligen Teils.

==3.Storage== [Verstehen] Die Datenspeicherform des Dezimaltyps besteht darin, alle 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 die folgende Tabelle zur Verfügung:

Übrig gebliebene Ziffern01– Was bedeutet die Tabelle? Beispiel: ==Kleinfall 1Kleinfall 2Verwandte kostenlose Lernempfehlungen:
Anzahl der Bytes
0
1. Feld dezimal(18,9), 18-9=9, also sind der ganzzahlige Teil und der dezimale Teil jeweils 9, und jede Seite belegt 4 Bytes; 2. Feld dezimal (20,6), 20-6 = 14, der Dezimalteil ist 6, was den 3 Bytes in der obigen Tabelle entspricht, und der ganzzahlige Teil ist 14, 14-9 = 5, was 4 Bytes entspricht Plus die 3 Bytes in der Tabelle Wenn wir also Dezimalzahlen festlegen, verwenden wir normalerweise den Dezimaltyp!!
mysql> drop table temp2;
Query OK, 0 rows affected (0.15 sec)

mysql> create table temp2(id float(10,2),id2 double(10,2),id3 decimal(10,2));
Query OK, 0 rows affected (0.18 sec)

mysql>  insert into temp2 values(1234567.21, 1234567.21,1234567.21),(9876543.21, 
    -> 9876543.12, 9876543.12);
Query OK, 2 rows affected (0.06 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from temp2;
+------------+------------+------------+
| id         | id2        | id3        |
+------------+------------+------------+
| 1234567.25 | 1234567.21 | 1234567.21 |
| 9876543.00 | 9876543.12 | 9876543.12 |
+------------+------------+------------+
2 rows in set (0.01 sec)

mysql> desc temp2;
+-------+---------------+------+-----+---------+-------+
| Field | Type          | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id    | float(10,2)   | YES  |     | NULL    |       |
| id2   | double(10,2)  | YES  |     | NULL    |       |
| id3   | decimal(10,2) | YES  |     | NULL    |       |
+-------+---------------+------+-----+---------+-------+
3 rows in set (0.01 sec)复制代码
mysql> drop table temp2;
Query OK, 0 rows affected (0.16 sec)

mysql> create table temp2(id double,id2 double);
Query OK, 0 rows affected (0.09 sec)

mysql> insert into temp2 values(1.235,1,235);
ERROR 1136 (21S01): Column count doesn't match value count at row 1
mysql> insert into temp2 values(1.235,1.235);
Query OK, 1 row affected (0.03 sec)

mysql> 
mysql> select * from temp2;
+-------+-------+
| id    | id2   |
+-------+-------+
| 1.235 | 1.235 |
+-------+-------+
1 row in set (0.00 sec)

mysql> insert into temp2 values(3.3,4.4);
Query OK, 1 row affected (0.09 sec)

mysql> select * from temp2;
+-------+-------+
| id    | id2   |
+-------+-------+
| 1.235 | 1.235 |
|   3.3 |   4.4 |
+-------+-------+
2 rows in set (0.00 sec)

mysql> select id-id2 from temp2;
+---------------------+
| id-id2              |
+---------------------+
|                   0 |
| -1.1000000000000005 |
+---------------------+
2 rows in set (0.00 sec)

mysql> alter table temp2 modify id decimal(10,5);
Query OK, 2 rows affected (0.28 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> alter table temp2 modify id2 decimal(10,5);
Query OK, 2 rows affected (0.15 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from temp2;
+---------+---------+
| id      | id2     |
+---------+---------+
| 1.23500 | 1.23500 |
| 3.30000 | 4.40000 |
+---------+---------+
2 rows in set (0.00 sec)

mysql> select id-id2 from temp2;
+----------+
| id-id2   |
+----------+
|  0.00000 |
| -1.10000 |
+----------+
2 rows in set (0.00 sec)复制代码
MySQL-Video Tutorial

Das obige ist der detaillierte Inhalt vonFassen Sie die Unterschiede zwischen Float-, Double- und Decimal-Gleitkommatypen in MySQL zusammen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.im. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen