Heim  >  Artikel  >  Datenbank  >  Welchen Typ verwendet MySQL für Dezimalzahlen?

Welchen Typ verwendet MySQL für Dezimalzahlen?

青灯夜游
青灯夜游Original
2021-12-01 16:41:0033451Durchsuche

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.

Welchen Typ verwendet MySQL für Dezimalzahlen?

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.

Welchen Typ verwendet MySQL für Dezimalzahlen?

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

  • DOUBLE ist wie folgt:

Der vorzeichenbehaftete Wertebereich: -1,7976931348623157E+308~-2,2250738585072014E-308.

  •                                                                                                                                                              vorzeichenloser Wertebereich: 0 und. -2.2250738585072014E-3 08~-1.7976931348623157E+308.

  • Hinweis
  • : Unabhängig davon, ob es sich um einen Festkomma- oder einen Gleitkommatyp handelt: Wenn die vom Benutzer angegebene Genauigkeit den Präzisionsbereich überschreitet, wird sie zur Verarbeitung gerundet.

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.

Um eine Spalte mit dem Datentyp 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类型也具有UNSIGNEDZEROFILL属性。 如果使用UNSIGNED属性,则DECIMAL UNSIGNED的列将不接受负值。

如果使用ZEROFILL,MySQL将把显示值填充到0以显示由列定义指定的宽度。 另外,如果我们对DECIMAL列使用ZERO FILL,MySQL将自动将UNSIGNED属性添加到列。

以下示例使用DECIMAL数据类型定义的一个叫作amount的列。

column_name DECIMAL(P);

在此示例中,amount列最多可以存储6位数字,小数位数为2位; 因此,amount列的范围是从-9999.999999.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.

    🎜Wie der INT-Datentyp verfügt auch der Typ 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(&#39;Bicycle&#39;, 500.34),(&#39;Seat&#39;,10.23),(&#39;Break&#39;,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的新表,其中包含三列:iddescriptioncost

    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(&#39;Bicycle&#39;, 500.34),(&#39;Seat&#39;,10.23),(&#39;Break&#39;,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(&#39;test&#39;, -100.11);
    提示:
    [SQL]INSERT INTO test_order(description,cost)
    VALUES(&#39;test&#39;, -100.11)
    
    [Err] 1264 - Out of range value for column &#39;cost&#39; 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn