# 浮点数数据类型

__*FLOAT 数据类型*__

__*DOUBLE 数据类型*__

+ 用于近似值:整数、小数或两者
+ 数据类型:
  + `FLOAT`:使用四个字节存储单精度值
  + `DOUBLE`:使用八个字节存储双精度值
----------------------------------------------------------------
注意:
与在 MySQL 中一样,FLOAT 数据类型存储近似值。对于货币等值,建议改用 DECIMAL 类型。在 TiDB 中,FLOAT 数据类型的默认精度为 8 位,但在 MySQL 中,默认精度为 6 位。例如,假设你在 TiDB 和 MySQL 中将 123456789 和 1.23456789 插入到 FLOAT 类型的列中,当你在 MySQL 中查询相应的值时,你会得到 123457000 和 1.234579,而在 TiDB 中,你会得到 123456790 和 1.2345679。

- TiDB 支持 MySQL 所有的浮点类型,包括 FLOAT、DOUBLE

- 字段说明:
- M	        小数总位数
- D	        小数点后位数
- UNSIGNED	无符号数,如果不加这个标识,则为有符号数
- ZEROFILL	补零标识,如果有这个标识,TiDB 会自动给类型- 增加 UNSIGNED 标识

- FLOAT 类型
  - 单精度浮点数。允许的值范围为 -2^128 ~ +2^128,也即 -3.402823466E+38 到 -1.175494351E-38、0 和 1.175494351E-38 到 3.402823466E+38。这些是基于 IEEE 标准的理论限制。实际的范围根据硬件或操作系统的不同可能稍微小些。
  - FLOAT(p) 类型中,p 表示精度（以位数表示）。只使用该值来确定是否结果列的数据类型为 FLOAT 或 DOUBLE。如果 p 为从 0 到 24,数据类型变为没有 M 或 D 值的 FLOAT。如果 p 为从 25 到 53,数据类型变为没有 M 或 D 值的 DOUBLE。结果列范围与本节前面描述的单精度 FLOAT 或双精度 DOUBLE 数据类型相同。

- DOUBLE 类型
  - 双精度浮点数,别名为 DOUBLE PRECISION。允许的值范围为:-2^1024 ~ +2^1024,也即是 -1.7976931348623157E+308 到 -2.2250738585072014E-308、0 和 2.2250738585072014E-308 到 1.7976931348623157E+308。这些是基于 IEEE 标准的理论限制。实际的范围根据硬件或操作系统的不同可能稍微小些。
```
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
DOUBLE PRECISION [(M,D)] [UNSIGNED] [ZEROFILL], REAL[(M,D)] [UNSIGNED] [ZEROFILL]
```
- 警告:
  - 与在 MySQL 中一样,DOUBLE 数据类型存储近似值。对于货币之类的精确值,建议使用 DECIMAL 类型。
