MySQL中支持的浮点类型有3个分别是:float、double和decimal类型。
float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值。
decimal数据类型用于要求非常高的精确度的计算中,这些类型允许指定数值的精确度和计数方法作为选择参数。精确度在这里是指为这个值保存的有效数字的总个数,而计数方法表示小数点后数字的个数。
例如,语句decimal(5,2)规定了存储的值将不会超过5位数字,并且小数点后面有2位数字。
使用场景:Decimal一般用于存储精度很高的信息,比如金币、rmb等。因为在计算中不会丢失精度。
float、double容易参数误差,建议采用decimal,其区别在于,float,double为非标准类型,在DB中保存的是近似值,而Decimal则以字符串的形式保存数值。
具体可以通过下面的例子得出结论。
以下为实例:
创建表
CREATE TABLE `data_type` ( `float_num` float NOT NULL, `double_num` double NOT NULL, `decimal_num` decimal(20,3) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1初始化数据
insert into `data_type`(`float_num`,`double_num`,`decimal_num`) values (1.3,1.3,'1.300'), (2.3,2.3,'2.300');
下面为float、double、decimal的初始记录(图1)
select * from data_type;
下面为采用sum()函数计算的结果(图2)
select sum(float_num),sum(double_num),sum(decimal_num) from data_type;
从上面2个结果中,我们可以得出float、double通过sum()函数处理后,得到的结果是不精确的,反观decimal通过sum()函数计算得到的结果是非常精确的。
如果float和double都通过四舍五入得到的结果精确度还是很高的。