標籤:
float數實值型別用於表示單精確度浮點數值,而double數實值型別用於表示雙精確度浮點數值,float和double都是浮點型,而decimal是定點型;
MySQL 浮點型和定點型可以用類型名稱後加(M,D)來表示,M表示該值的總共長度,D表示小數點後面的長度,M和D又稱為精度和標度,如float(7,4)的 可顯示為-999.9999,MySQL儲存值時進行四捨五入,如果插入999.00009,則結果為999.0001。
FLOAT和DOUBLE在不指 定精度時,預設會按照實際的精度來顯示,而DECIMAL在不指定精度時,預設整數為10,小數為0。
1、CREATE TABLE test(f FLOAT(5,2) DEFAULT NULL,d DOUBLE(5,2) DEFAULT NULL,de DECIMAL(5,2) DEFAULT NULL);
2、DESC test;
3、INSERT INTO test(f,d,de) VALUES(1.23,1.23,1.23);
資料插入都正確
4、INSERT INTO test(f,d,de) VALUES(1.234,1.234,1.23);
資料插入都正確,但是f和d由於標度的限制,捨去了最後一位。
5、INSERT INTO test(f,d,de) VALUES(1.234,1.234,1.234);
資料也插入成功,但是有一個警告提示:
1 queries executed, 1 success, 0 errors, 1 warnings
Note Code : 1265
Data truncated for column ‘de‘ at row 1
6、將id1,id2,id3的精度和標度都去掉
ALTER TABLE test MODIFY f FLOAT;
ALTER TABLE test MODIFY d DOUBLE;
ALTER TABLE test MODIFY de DECIMAL;
DELETE FROM test;
DESC test;
7、INSERT INTO test(f,d,de) VALUES(1.234,1.234,1.234);
1 queries executed, 1 success, 0 errors, 1 warnings
Note Code : 1265
Data truncated for column ‘de‘ at row 1
f和d的資料正確插入,而de被截斷。
浮點數如果不寫精度和標度,則會按照實際顯示,如果有精度和標度,則會將資料四捨五入後插入,系統不報錯,定點數如果不設定精度和標度,剛按照預設的(10,0)進行操作,如果資料超過了精度和標度值,則會警告!
同時,對資料求SUM()時會出現不同的結果,float和double求SUM都會出現很多小數點,而decimal求SUM得到的是精準數值:
8、INSERT INTO test(f,d,de) VALUES(1.234,0.01,1.23);
資料都插入成功
9、SELECT SUM(f),SUM(d),SUM(de) FROM test;
理論上SUM(f)=3.698,SUM(d)=2.474,SUM(de)=3.46,但f,d都出現後面很長的一串浮點小數點。
MySQL類型float double decimal的區別