Die für MySQL-Dezimalzahlen verfügbaren Typen: 1. Typ FLOAT, der Gleitkommazahlen mit einfacher Genauigkeit speichern kann; 2. Typ DOUBLE, der Gleitkommazahlen mit doppelter Genauigkeit speichern kann; 3. Typ DECIMAL, der zum Speichern präziser Zahlen verwendet wird; Werte wie die Währung in Daten von Buchhaltungssystemen.
Die Betriebsumgebung dieses Tutorials: Windows7-System, MySQL8-Version, Dell G3-Computer.
Gleitkommazahlen und Festkommazahlen werden in MySQL zur Darstellung von Dezimalzahlen verwendet.
Es gibt zwei Gleitkommatypen: Gleitkommazahlen mit einfacher Genauigkeit (FLOAT) und Gleitkommazahlen mit doppelter Genauigkeit (DOUBLE). Es gibt nur einen Festkommatyp, nämlich DECIMAL.
Sowohl Gleitkommatypen als auch Festkommatypen können durch (M, D) dargestellt werden, wobei M als Präzision bezeichnet wird und die Gesamtzahl der Ziffern angibt; D als Skalierung bezeichnet wird und die Anzahl der Dezimalstellen angibt.
Der Wertebereich des Gleitkommazahlentyps ist M (1~255) und D (1~30 und darf nicht größer als M-2 sein), die jeweils die Anzeigebreite und die Anzahl der Dezimalstellen darstellen. M und D sind in FLOAT und DOUBLE optional, und die Typen FLOAT und DOUBLE werden mit der maximalen von der Hardware unterstützten Präzision gespeichert. Der Standard-D-Wert für DECIMAL ist 0 und der M-Wert ist 10.
In der folgenden Tabelle sind die Dezimaltypen und Speicheranforderungen in MySQL aufgeführt.
Der Typ DECIMAL unterscheidet sich von FLOAT und DOUBLE. DOUBLE wird tatsächlich in Form einer Zeichenfolge gespeichert. Der maximal mögliche Wertebereich von DECIMAL ist der gleiche wie der von DOUBLE, der effektive Wertebereich wird jedoch durch M und D bestimmt. Wenn M geändert und D festgelegt wird, wird der Wertebereich mit zunehmendem M größer.
Wie Sie der obigen Tabelle entnehmen können, ist der Speicherplatz von DECIMAL nicht festgelegt, sondern wird durch den Präzisionswert M bestimmt, der M+2 Bytes belegt.
Der Wertebereich des FLOAT-Typs ist wie folgt:
Der vorzeichenbehaftete Wertebereich: -3,402823466E+38~-1,175494351E-38.值 Der Wert des Nichtsymbols: 0 und -1,175494351E-38 ~ -3,402823466e+38. Der Wertebereich des Typs
Der vorzeichenbehaftete Wertebereich: -1,7976931348623157E+308~-2,2250738585072014E-308.
vorzeichenloser Wertebereich: 0 und. -2.2250738585072014E-3 08~-1.7976931348623157E+308.
FLOAT und DOUBLE verwenden standardmäßig die tatsächliche Genauigkeit, wenn die Genauigkeit nicht angegeben ist. DECIMAL wird standardmäßig auf (10, 0) gesetzt, wenn die Genauigkeit nicht angegeben ist.
Der Vorteil von Gleitkommazahlen gegenüber Festkommazahlen besteht darin, dass sie bei konstanter Länge einen größeren Bereich darstellen können. Der Nachteil besteht darin, dass es zu Genauigkeitsproblemen kommen kann.DECIMAL-Typ Der Datentyp DECIMAL
wird zum Speichern präziser Werte in der Datenbank verwendet. Wir verwenden den Datentyp DECIMAL
häufig für Spalten, die eine präzise Genauigkeit beibehalten, wie z. B. Währungsdaten in Buchhaltungssystemen.
DECIMAL
zu definieren, verwenden Sie die folgende Syntax: column_name DECIMAL(P,D);
In der obigen Syntax: DECIMAL
数据类型用于在数据库中存储精确的数值。我们经常将DECIMAL
数据类型用于保留准确精确度的列,例如会计系统中的货币数据。
要定义数据类型为DECIMAL
的列,请使用以下语法:
amount DECIMAL(6,2);
在上面的语法中:
P
是表示有效数字数的精度。 P
范围为1〜65
。D
是表示小数点后的位数。 D
的范围是0
~30
。MySQL要求D
小于或等于()<code>P
。
DECIMAL(P,D)
表示列可以存储D
位小数的P
位数。十进制列的实际范围取决于精度和刻度。
与INT数据类型一样,DECIMAL
类型也具有UNSIGNED
和ZEROFILL
属性。 如果使用UNSIGNED
属性,则DECIMAL UNSIGNED
的列将不接受负值。
如果使用ZEROFILL
,MySQL将把显示值填充到0
以显示由列定义指定的宽度。 另外,如果我们对DECIMAL
列使用ZERO FILL
,MySQL将自动将UNSIGNED
属性添加到列。
以下示例使用DECIMAL
数据类型定义的一个叫作amount
的列。
column_name DECIMAL(P);
在此示例中,amount
列最多可以存储6
位数字,小数位数为2
位; 因此,amount
列的范围是从-9999.99
到9999.99
。
MySQL允许使用以下语法:
column_name DECIMAL(P,0);
这相当于:
column_name DECIMAL;
在这种情况下,列不包含小数部分或小数点。
此外,我们甚至可以使用以下语法。
amount DECIMAL(19,2);
在这种情况下,P
的默认值为10
P
ist die Anzahl der signifikanten Ziffern Genauigkeit. Der Bereich von P
liegt zwischen 1~65
. D
stellt die Anzahl der Nachkommastellen dar. Der Bereich von D
ist 0
~30
. MySQL erfordert, dass D
kleiner oder gleich () <code>P
ist. DECIMAL(P, D)
bedeutet, dass die Spalte P
Ziffern von D
Dezimalstellen speichern kann. Der tatsächliche Bereich einer Dezimalspalte hängt von der Genauigkeit und dem Maßstab ab.
DECIMAL
über die Attribute UNSIGNED
und ZEROFILL
. Wenn das Attribut UNSIGNED
verwendet wird, akzeptiert die Spalte DECIMAL UNSIGNED
keine negativen Werte. 🎜🎜Wenn Sie ZEROFILL
verwenden, füllt MySQL den Anzeigewert auf 0
auf, um die in der Spaltendefinition angegebene Breite anzuzeigen. Wenn wir außerdem ZERO FILL
für eine DECIMAL
-Spalte verwenden, fügt MySQL der Spalte automatisch das Attribut UNSIGNED
hinzu. 🎜🎜Das folgende Beispiel verwendet eine Spalte namens amount
, die mit dem Datentyp DECIMAL
definiert ist. 🎜amount DECIMAL(19,4);🎜In diesem Beispiel kann die Spalte
amount
bis zu 6
Ziffern mit 2
Dezimalstellen speichern, also Der Bereich von Die Spalte „Betrag“
reicht von -9999,99
bis 9999,99
. 🎜🎜MySQL erlaubt die folgende Syntax: 🎜CREATE TABLE test_order ( id INT AUTO_INCREMENT PRIMARY KEY, description VARCHAR(255), cost DECIMAL(19,4) NOT NULL );🎜 Dies entspricht: 🎜
INSERT INTO test_order(description,cost) VALUES('Bicycle', 500.34),('Seat',10.23),('Break',5.21);🎜 In diesem Fall enthält die Spalte keinen Dezimalteil oder Dezimalpunkt. 🎜🎜Außerdem können wir sogar die folgende Syntax verwenden. 🎜
SELECT * from test_order🎜In diesem Fall ist der Standardwert von
P
10
. 🎜🎜🎜🎜MySQL DECIMAL-Speicher🎜🎜🎜MySQL分别为整数和小数部分分配存储空间。 MySQL使用二进制格式存储DECIMAL
值。它将9
位数字包装成4
个字节。
对于每个部分,需要4
个字节来存储9
位数的每个倍数。剩余数字所需的存储如下表所示:
剩余数字 | 位 |
---|---|
0 | 0 |
1–2 | 1 |
3–4 | 2 |
5–6 | 3 |
7-9 | 4 |
例如,DECIMAL(19,9)
对于小数部分具有9
位数字,对于整数部分具有19
位= 10
位数字,小数部分需要4
个字节。 整数部分对于前9
位数字需要4
个字节,1
个剩余字节需要1
个字节。DECIMAL(19,9)
列总共需要9
个字节。
MySQL DECIMAL数据类型和货币数据
经常使用DECIMAL
数据类型的货币数据,如价格,工资,账户余额等。如果要设计一个处理货币数据的数据库,则可参考以下语法 -
amount DECIMAL(19,2);
但是,如果您要遵守公认会计原则(GAAP)规则,则货币栏必须至少包含4
位小数,以确保舍入值不超过$0.01
。 在这种情况下,应该定义具有4
位小数的列,如下所示:
amount DECIMAL(19,4);
MySQL DECIMAL数据类型示例
首先,创建一个名为test_order
的新表,其中包含三列:id
,description
和cost
。
CREATE TABLE test_order ( id INT AUTO_INCREMENT PRIMARY KEY, description VARCHAR(255), cost DECIMAL(19,4) NOT NULL );
第二步,将资料插入test_order表。
INSERT INTO test_order(description,cost) VALUES('Bicycle', 500.34),('Seat',10.23),('Break',5.21);
第三步,从test_order表查询数据。
SELECT * from test_order
第四步,更改cost
列以包含ZEROFILL
属性。
ALTER TABLE test_order MODIFY cost DECIMAL(19,4) zerofill;
第五步,再次查询test_order表。
SELECT * from test_order
查询结果:
如上所见,在输出值中填充了许多零。
因为zerofill,当我们插入负值会报错:
INSERT INTO test_order(description,cost) VALUES('test', -100.11); 提示: [SQL]INSERT INTO test_order(description,cost) VALUES('test', -100.11) [Err] 1264 - Out of range value for column 'cost' at row 1
其它插入测试结论:
当数值在其取值范围之内,小数位多了,则四舍五入后直接截断多出的小数位。
若数值在其取值范围之外,则直接报Out of range value错误。
【相关推荐:mysql视频教程】
Das obige ist der detaillierte Inhalt vonWelchen Typ verwendet MySQL für Dezimalzahlen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!