总结
mysql中使用【浮点数】和【定点数】来表示小数。
浮点类型有2种:
<a>单精度浮点数float
<b>双精度浮点数double
定点类型只有一种:
就是decimal
浮点类型和定点类型都可以用(M,D)来表示,
`M`称为精度,表示整数部分和小数部分总共的位数。
`D`称为标度,表示小数部分的位数。
浮点数类型的取值范围为 M(1~255)和 D(1~30,且不能大于 M-2),分别表示显示宽度和小数位数。
M 和 D 在 FLOAT 和 DOUBLE 中是可选的,
FLOAT 和 DOUBLE 类型将被保存为硬件所支持的最大精度。
DECIMAL 的默认 D 值为 0、M 值为 10。
宽度
精度
1/三者的区别
float:单精度浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位)
double:双精度实型,含字节数为8,64bit数值范围-1.7E308~1.7E308(15个有效位)
decimal:数字型,128bit,不存在精度损失,常用于银行帐目计算。(28个有效位)
2/decimal的详细介绍
decimal(a,b)
参数说明:
a指定小数点左边和右边可以存储的`十进制数字`的总位数,最大精度38。
b指定小数点右边可以存储的`十进制数字`的最大位数。
小数位数必须是从0到a之间的值。默认小数位数是0。
DECIMAL类型,通常用于要求非常高的精确度的计算中,这些类型允许指定数值的精确度和计数方法作为选择参数。
精确度在这里是指为这个值保存的有效数字的总个数,而计数方法表示小数点后数字的个数。
例如,语句DECIMAL(5,2)规定了存储的值将不会超过5位数字,开且小数点后面有2位数字。
3/demo
float f = 345.98756
结果显示为345.9876,只显示7个有效位(最大宽度),对最后一位数四舍五入。
double d=345.975423578631442
结果显示为345.975423578631,只显示15个有效位(最大宽度),对最后一位四舍五入。
注:float和double的相乘操作,数字溢出不会报错,会进行四舍五入的截断,这样会有精度的损失,
decimal dd=345.545454879
可以支持28位,对最后一位四舍五入
当对decimal类型进行操作时,数值会因溢出而报错。