MySQL中float、double、decimal三个浮点类型的区别

类型 大小 范围(有符号) 范围(无符号) 用途
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。

上一篇:SQL如何求解等比数列问题?


下一篇:天池 python 训练营