1、浮点型和定点型
1.1 浮点型:
浮点型能够表示更大的数据范围,但是容易发生精度的问题
float和double属于浮点型,其取值范围与java中的浮点类型的取值范围相同,float占用4字节,double占用8字节
1.2 定点型:
定点型能够准确的表示具体的数据,多用于表示Money或者敏感的精确数字
decimal属于定点型,最大取值范围和double类型相同,给定decimal的有效取值范围由M和D决定。
2、float、double和decimal取值范围
注:
M表示:指定值的总位数的长度,即整数部分加上小数部分的长度。
D表示:指定值的小数部分的位数长度。
如:salary(6,2),就表示薪资的总位数为6,小数部分占2位,最大值是9999.99.,最小值是-9999.99
3、decimal的使用
3.1 用法1
列的声明语法是DECIMAL(M,D)。NUMERIC与DECIMAL同义,如果字段类型定义为NUMERIC,则将自动转成DECIMAL。
3.2 用法2
对于声明语法DECIMAL(M,D),自变量的值范围如下:
- M是最大位数(精度),范围是1到65。可不指定,默认值是10。
- D是小数点右边的位数(小数位)。范围是0到30,并且不能大于M,可不指定,默认值是0。
3.3 decimal的特点
- DECIMAL(M,D)中,M范围是1到65,D范围是0到30。
- M默认为10,D默认为0,D不大于M。
- DECIMAL(6,2)可存储范围是从-9999.99到9999.99,超出存储范围会报错。
- 存储数值时,小数位不足会自动补0,首位数字为0自动忽略。小数位超出会截断,产生告警,并按四舍五入处理。
- 使用DECIMAL字段时,建议M,D参数手动指定,并按需分配。
3.4 decimal和浮点的比较(float和double)
float、double属于浮点数类型,它们同样可以存储小数,
但是float、double类型无法确保精度,很容易产生误差,
特别是在求和计算的时候,所有当存储小数,特别是涉及金额时推荐使用DECIMAL类型。