浮点类型(近似值) - FLOAT,DOUBLE
FLOAT
和DOUBLE
类型代表近似数字数据值。MySQL对于单精度值使用四个字节,对于双精度值使用八个字节。
因为FLOAT
,SQL标准允许FLOAT
在括号中的关键字后面的位的精度(而不是指数的范围)的可选规范 。MySQL还支持这种可选的精度规范,但精度值仅用于确定存储大小。从0到23的精度导致4字节的单精度FLOAT
列。从24到53的精度导致8字节的双精度DOUBLE
列。
定点类型(精确值) - DECIMAL,NUMERIC
NUMERIC
实现为DECIMAL
,关于DECIMAL
同样适用的说明 NUMERIC
。 在DECIMAL
列声明中,精度和比例可以(通常是)指定; 例如:
salary DECIMAL(5,2)
在这个例子中,5
是精度和 2
尺度。精度表示为值存储的有效数字的数量,标度表示小数点后可存储的位数。
标准SQL要求,DECIMAL(5,2)
能够存储任何一个五位数和两位小数,所以值可以存储在salary
列范围-999.99
至 999.99
。
在标准SQL中,语法 相当于 。类似地,语法相当于允许实现来决定其值的方式 。MySQL支持这两种变体形式的语法。默认值为10。DECIMAL(
M
)DECIMAL(
M
,0)DECIMAL
DECIMAL(
M
,0)M
DECIMAL
M
如果刻度为0,DECIMAL
则不包含小数点或小数部分。
最大位数为DECIMAL
65,但给定DECIMAL
列的实际范围可以由给定列的精度或比例来约束。当这样的列被分配一个数字小于指定比例允许的小数点后面的数值时,该值将转换为该比例。(精确的行为是操作系统特定的,但通常的效果是截断到允许的位数。)
总结:
float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位)
double:双精度实型,含字节数为8,64bit数值范围-1.7E308~1.7E308(15个有效位)
decimal:数字型,128bit,不存在精度损失,常用于银行帐目计算。(28个有效位)
float f = 345.98756f;//结果显示为345.9876,只显示7个有效位,对最后一位数四舍五入。
double d=345.975423578631442d;//结果显示为345.975423578631,只显示15个有效位,对最后一位四舍五入。
注:float和double的相乘操作,数字溢出不会报错,会有精度的损失。
decimal dd=345.545454879.....//可以支持28位,对最后一位四舍五入。
注:当对decimal类型进行操作时,数值会因溢出而报错。
相关博客:http://www.cnblogs.com/haiyang1985/archive/2009/03/03/1402394.html