【mysql】float,double,decimal

517 阅读2分钟

总结

mysql中使用【浮点数】和【定点数】来表示小数。

浮点类型有2种:
    <a>单精度浮点数float
    <b>双精度浮点数double
    
定点类型只有一种:
     就是decimal

浮点类型和定点类型都可以用(M,D)来表示,
`M`称为精度,表示整数部分和小数部分总共的位数。
`D`称为标度,表示小数部分的位数。

浮点数类型的取值范围为 M(1255)和 D(130,且不能大于 M-2),分别表示显示宽度和小数位数。

M 和 D 在 FLOATDOUBLE 中是可选的,
FLOATDOUBLE 类型将被保存为硬件所支持的最大精度。
DECIMAL 的默认 D 值为 0、M 值为 10。

宽度
精度

1/三者的区别

float:单精度浮点型,含字节数为432bit,数值范围为-3.4E38~3.4E387个有效位)

double:双精度实型,含字节数为864bit数值范围-1.7E308~1.7E30815个有效位)

decimal:数字型,128bit,不存在精度损失,常用于银行帐目计算。(28个有效位)

2/decimal的详细介绍

decimal(a,b)
参数说明:
    a指定小数点左边和右边可以存储的`十进制数字`的总位数,最大精度38b指定小数点右边可以存储的`十进制数字`的最大位数。
    小数位数必须是从0a之间的值。默认小数位数是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类型进行操作时,数值会因溢出而报错。