mysql中的float、double和decimal类型的区别和使用场景分析

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都通过四舍五入得到的结果精确度还是很高的。


感谢您的阅读,希望对您有帮助,本文版权归 #惊讶# 所有
评论 (0)