---
title: github-fill
description: 浮点类型 浮点类型为定长、非精确数值类型，值域和精度取决于类型长度、Precision 和 Scale，以及是否为无符号。 Precision 和 Scale 分别表示十进制下的总最大有效位数、小数部分最大有效位数，整数部分最大有效位数等于 Precision 减去 Scale 的值，其中 Precision 最大值…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.4.1

# 浮点类型

更新时间：2025-11-09 20:41:14

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.4.1/zh-CN/700.reference/500.sql-reference/100.sql-syntax/200.common-tenant-of-mysql-mode/100.basic-elements-of-mysql-mode/100.data-type-of-mysql-mode/200.numeric-of-mysql-mode/400.floating-point-type-of-mysql-mode.md)  

浮点类型为定长、非精确数值类型，值域和精度取决于类型长度、Precision 和 Scale，以及是否为无符号。

Precision 和 Scale 分别表示十进制下的总最大有效位数、小数部分最大有效位数，整数部分最大有效位数等于 Precision 减去 Scale 的值，其中 Precision 最大值为 255（Scale 只能为 0），Scale 的最大值为 30。

#### 说明

浮点类型的精度只是 IEEE 标准中规定的理论值，实际情况可能因硬件或操作系统限制略有不同。

下表为不指定 Precision 和 Scale 时浮点类型所需的存储长度和值域。

| 类型 | 长度（字节） | 值域 | 精度 |
| --- | --- | --- | --- |
| `FLOAT` | 4 | [-3.402823466E+38, -1.175494351E-38]、0 和 [1.175494351E-38,3.402823466E+38] | 7 位 |
| `DOUBLE` | 8 | [-1.7976931348623157E+308, -2.2250738585072014E-308]、0 和 [2.2250738585072014E-308,1.7976931348623157E+308] | 15 位 |

如果指定 Precision 和 Scale，则值域确定方法与定点类型相同。

## FLOAT

`FLOAT` 用于表示一个小的（单精度）浮点数。语法如下：

```sql
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

```

`M` 是可以存储的总位数，`D` 是小数点后的位数。如果省略 `M` 和 `D`，则将值存储到硬件允许的限制范围内。单精度浮点数精确到大约 7 个小数位。

如果为数值列指定 `ZEROFILL`，OceanBase 数据库会自动向该列添加 `UNSIGNED` 属性。如果指定 `UNSIGNED`，则不允许为负值。

#### 说明

`FLOAT(M,D)` 是过时语法，不建议用户使用。

`FLOAT` 还支持以下语法：

```sql
FLOAT(p) [UNSIGNED] [ZEROFILL]

```

`p` 表示以位为单位的精度，但仅使用此值来确定结果数据类型为 `FLOAT` 或是 `DOUBLE`。如果 `p` 为 0 到 24，则数据类型变为 `FLOAT`，没有 `M` 或 `D` 值；如果 `p` 为 25 到 53，则数据类型变为 `DOUBLE`，没有 `M` 或 `D` 值。结果列的范围与本节前面描述的单精度 `FLOAT` 或双精度 `DOUBLE` 数据类型相同。

## DOUBLE

`DOUBLE` 用于表示正常大小（双精度）浮点数。语法如下：

```sql
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

```

`M` 是可以存储总位数，`D` 是小数点后的位数。如果省略 `M` 和 `D`，则将值存储到硬件允许的限制范围内。双精度浮点数精确到大约 15 位小数。

#### 说明

`DOUBLE[(M,D)]` 是 MySQL 的过时语法，不建议用户使用。如果用户需要精确查找，建议使用`DECIMAL` 类型。

## DOUBLE PRECISION

`DOUBLE PRECISION` 是 `DOUBLE` 的同义词。语法如下：

```sql
DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL], REAL[(M,D)] [UNSIGNED] [ZEROFILL]

```

#### 说明

二进制浮点数暂时不支持特殊值 `infinity` 和 `NaN`。

  上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
