类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
FLOAT | 4字节 | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8字节 | (-1.797 693 134 862 315 7 E+308,-2.225073858507 2014E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL | 对decimal(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
MySQL中float、double、decimal这三种都是浮点类型,它们有什么区别呢?
float与double的区别
float 浮点类型用于表示单精度浮点数值,double浮点类型用于表示双精度浮点数值。
float单精度浮点数占 4 个字节,1个字节占8位,所以float存储浮点数用32位二进制进行描述。
double双精度浮点数占 8 个字节,所以double存储浮点数用64位二进制进行描述。
根据ieee二进制浮点数算术标准:
float单精度小数部分只能精确到后面6位,加上小数点前的一位,即有效数字为7位。
double双精度小数部分能精确到小数点后的15位,加上小数点前的一位,有效位数为16位。
因此double存储浮点数的精度更高,这里的精度主要取决于小数点后边位数的长度,越长越精确。
float与double的优缺点
- float占4 个字节,double占 8 个字节。
- 在程序中一般来说,cpu处理单精度浮点数的速度比处理双精度浮点数快,因为double尾数比float的尾数多, 所以计算起来必然是有开销的。
- float精度较低,当数值很大或很小时,它将变得不精确。
当需要存储的小数对精度要求不高时,可以选择float单精度浮点型,可以节省内存空间,提高计算速度。当需要进行高速数学计算、科学计算、卫星定位计算等对精度要求较高时,可以选择double双精度浮点型。
float、double与decimal的区别
虽然double比float精度高一些,但两者存储的都是近似值,并不精确。而decimal是精确存储,它是以字符串形式保存的精确数值。
decimal(M, D) 的参数说明
The declaration syntax for a DECIMAL column is DECIMAL(M,D). The ranges of values for the arguments are as follows:
M is the maximum number of digits (the precision). It has a range of 1 to 65.
D is the number of digits to the right of the decimal point (the scale). It has a range of 0 to 30 and must be no larger than M.
M的范围是0-65,D的范围是0-30,并且0 <= D <= M <= 65。