float类型表示单精度浮点数值,double类型表示双精度浮点数值,float和double都是浮点型,而decimal是定点型;
MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(5,2)的 可显示为999.99,MySQL保存值时会进行四舍五入,如果插入999.009,则结果为999.01。
float和double在不指定精度时,默认会按照实际的精度来显示,而DECIMAL在不指定精度时,默认整数为10,小数为0。
先创建一个表:
CREATE TABLE test(
f FLOAT(10,2) DEFAULT NULL,
d DOUBLE(10,2) DEFAULT NULL,
de DECIMAL(10,2) DEFAULT NULL
);
insert三条数据如下所示:
INSERT INTO test(f,d,de) VALUES(1.23,1.23,1.23);
INSERT INTO test(f,d,de) VALUES(1.234,1.234,1.23);
INSERT INTO test(f,d,de) VALUES(1.234,1.234,1.234);
然后修改表结构并新增一条数据:
ALTER TABLE test MODIFY f FLOAT;
ALTER TABLE test MODIFY d DOUBLE;
INSERT INTO test(f,d,de) VALUES(1.234,1.234,1.234);
此时计算求和值如下图所示:
SELECT SUM(f),SUM(d),SUM(de) FROM test;
float和double求SUM的结果都是不精确的,只有decimal求SUM得到的是精准数值:
所以,decimal 类型是适合财务和货币计算的128位数据类型。