小数类型分类

MySQL 提供三种小数类型来表示非整数值:

 

类型名称说明存储需求特点
FLOAT单精度浮点数4字节近似值存储,范围大但可能有精度损失
DOUBLE双精度浮点数8字节比FLOAT更高精度的近似值存储
DECIMAL精确的定点数M+2字节(M为精度)精确存储,以字符串形式保存,适合财务等需要精确计算的场景

       

精度表示方式

M (精度):总位数(整数+小数部分)

D (标度):小数位数

格式:(M, D)

   FLOAT(7,4):共7位,其中4位小数

   DECIMAL(10,2):共10位,其中2位小数

 

取值范围对比

 

FLOAT

 有符号:±3.402823466E+38 ~ ±1.175494351E-38

 无符号:0 和 1.175494351E-38 ~ 3.402823466E+38

 

DOUBLE

 有符号:±1.7976931348623157E+308 ~ ±2.2250738585072014E-308

 无符号:0 和 2.2250738585072014E-308 ~ 1.7976931348623157E+308

 

关键特性

 

1. 默认值:

    FLOAT/DOUBLE:不指定精度时使用硬件支持的最大精度

    DECIMAL:默认DECIMAL(10,0)

 

2.存储方式:

    浮点数(FLOAT/DOUBLE):近似值存储,可能有精度损失

    定点数(DECIMAL):精确存储,以字符串形式保存

 

3.精度处理:

    超出指定精度时会四舍五入

    DECIMAL的有效范围随M增大而扩大

 

使用建议

 

1.选择原则:

    需要精确计算(如财务数据):使用DECIMAL

    需要大范围数值且可接受近似值:使用FLOAT/DOUBLE

    一般科学计算:DOUBLE

    节省空间且范围足够:FLOAT

 

2.注意事项:

    避免用浮点数进行等值比较(可能因精度问题出错)

    浮点数运算(特别是减法)可能导致意外结果

    DECIMAL会占用更多存储空间但保证精度

 

3.性能考虑:

    浮点运算通常比DECIMAL运算快

    DECIMAL的精确性是以牺牲性能为代价的

点赞(1)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)