剩余數(shù)字 | 位 |
---|---|
0 | 0 |
1–2 | 1 |
3–4 | 2 |
5–6 | 3 |
7-9 | 4 |
例如,DECIMAL(19,9)
對于小數(shù)部分具有9
位數(shù)字,對于整數(shù)部分具有19
位=10
位數(shù)字,小數(shù)部分需要4
個字節(jié)。 整數(shù)部分對于前9
位數(shù)字需要4
個字節(jié),1
個剩余字節(jié)需要1
個字節(jié)。DECIMAL(19,9)
列總共需要9
個字節(jié)。
經(jīng)常使用DECIMAL
數(shù)據(jù)類型的貨幣數(shù)據(jù),如價格,工資,賬戶余額等。如果要設(shè)計一個處理貨幣數(shù)據(jù)的數(shù)據(jù)庫,則可參考以下語法 -
amount DECIMAL(19,2);
但是,如果您要遵守公認(rèn)會計原則(GAAP)規(guī)則,則貨幣欄必須至少包含4
位小數(shù),以確保舍入值不超過$0.01
。 在這種情況下,應(yīng)該定義具有4
位小數(shù)的列,如下所示:
amount DECIMAL(19,4);
首先,創(chuàng)建一個名為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表查詢數(shù)據(jù)。
SELECT * from test_order
查詢結(jié)果:
第四步,更改cost
列以包含ZEROFILL
屬性。
ALTER TABLE test_order MODIFY cost DECIMAL(19,4) zerofill;
第五步,再次查詢test_order表。
SELECT * from test_order
查詢結(jié)果:
如上所見,在輸出值中填充了許多零。
因為zerofill,當(dāng)我們插入負(fù)值會報錯:
INSERT INTO test_order(description,cost)
VALUES('test', -100.11);
br>提示:
[SQL]INSERT INTO test_order(description,cost)
VALUES('test', -100.11)
[Err] 1264 - Out of range value for column 'cost' at row 1
其它插入測試結(jié)論:
當(dāng)數(shù)值在其取值范圍之內(nèi),小數(shù)位多了,則四舍五入后直接截斷多出的小數(shù)位。
若數(shù)值在其取值范圍之外,則直接報Out of range value錯誤。
到此這篇關(guān)于MySQL數(shù)據(jù)類型DECIMAL用法詳解的文章就介紹到這了,更多相關(guān)MySQL數(shù)據(jù)類型DECIMAL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
標(biāo)簽:甘南 錦州 滄州 資陽 隨州 荊州 吉林 黑河
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL數(shù)據(jù)類型DECIMAL用法詳解》,本文關(guān)鍵詞 MySQL,數(shù)據(jù),類型,DECIMAL,用法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。