在mysql中,金額用“DECIMAL”類型。DECIMAL類型是專門為財務相關(guān)問題而設(shè)計的數(shù)據(jù)類型,能夠解決數(shù)據(jù)的范圍和精度的問題,常用于貨幣數(shù)據(jù),如價格,工資,帳戶余額等;它實際上是以字符串的形式存放的,可在定義時劃定整數(shù)部分以及小數(shù)部分的位數(shù),語法“DECIMAL(M,D)”,參數(shù)M是數(shù)字的最大數(shù)(精度),參數(shù)D是小數(shù)點右側(cè)數(shù)字的數(shù)目(標度)。
本教程操作環(huán)境:windows7系統(tǒng)、mysql8版本、Dell G3電腦。
在mysql中,金額用“DECIMAL”類型。
Decimal(定點數(shù))為專門為財務相關(guān)問題設(shè)計的數(shù)據(jù)類型,能夠解決數(shù)據(jù)的范圍和精度的問題。
DECIMAL從MySQL 5.1引入,列的聲明語法是DECIMAL(M,D)。在MySQL 5.1中,參量的取值范圍如下:
-
M是數(shù)字的最大數(shù)(精度)。其范圍為1~65(在較舊的MySQL版本中,允許的范圍是1~254),M 的默認 值是10。
-
D是小數(shù)點右側(cè)數(shù)字的數(shù)目(標度)。其范圍是0~30,但不得超過M。
說明:Float占4個字節(jié),double占8個字節(jié),decimail(M,D)占M+2個字節(jié)。
如DECIMAL(5,2) 的最大值為9 9 9 9 . 9 9,因為有7 個字節(jié)可用。
DECIMAL 類型不同于 FLOAT 和 DOUBLE。DOUBLE 實際上是以字符串的形式存放的,DECIMAL 可能的最大取值范圍與 DOUBLE 相同,但是有效的取值范圍由 M 和 D 決定。如果改變 M 而固定 D,則取值范圍將隨 M 的變大而變大。
強調(diào)一下:在 MySQL 中,定點數(shù)以字符串形式存儲,在對精度要求比較高的時候(如貨幣、科學數(shù)據(jù)),使用 DECIMAL 的類型比較好,另外兩個浮點數(shù)進行減法和比較運算時也容易出問題,所以在使用浮點數(shù)時需要注意,并盡量避免做浮點數(shù)比較。
MySQL DECIMAL數(shù)據(jù)類型和貨幣數(shù)據(jù)
我們經(jīng)常將DECIMAL數(shù)據(jù)類型用于貨幣數(shù)據(jù),如價格,工資,帳戶余額等。如果您設(shè)計一個處理貨幣數(shù)據(jù)的數(shù)據(jù)庫,則以下語法應沒問題。
amount?DECIMAL(19,2);
但是,如果您要遵守公認會計原則(GAAP)規(guī)則,則貨幣列必須至少包含4個小數(shù)位,以確保舍入值不超過0.01美元。在這種情況下,您應定義具有4個小數(shù)位的列,如下所示:
amount?DECIMAL(19,4);
MySQL DECIMAL數(shù)據(jù)類型示例
首先,創(chuàng)建一個新表名為materials三個字段分別:id,description和cost。
CREATE?TABLE?materials?( ????id?INT?AUTO_INCREMENT?PRIMARY?KEY, ????description?VARCHAR(255), ????cost?DECIMAL(19?,?4?)?NOT?NULL );
其次,將數(shù)據(jù)插入materials表中。
INSERT?INTO?materials(description,cost) VALUES('Bicycle',?500.34),('Seat',10.23),('Break',5.21);
第三,從表中查詢數(shù)據(jù)materials。
SELECT? ????* FROM ????materials;
第四,修改cost列以包含ZEROFILL屬性。
ALTER?TABLE?materials MODIFY?cost?DECIMAL(19,4)?zerofill;
五,再次查詢材料表。
SELECT? ????* FROM ????materials;
如您所見,我們在輸出值中填充了許多零。
【相關(guān)推薦:mysql視頻教程】