暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OceanBase 学习笔记126:浮点类型有哪些?

431

欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/


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

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

说明

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

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

类型长度(字节)值域精度
FLOAT4[-3.402823466E+38, -1.175494351E-38]、0 和 [1.175494351E-38,3.402823466E+38]7 位
DOUBLE8[-1.7976931348623157E+308, -2.2250738585072014E-308]、0 和 [2.2250738585072014E-308,1.7976931348623157E+308]15 位

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

FLOAT

FLOAT 用于表示一个小的(单精度)浮点数。语法如下:

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

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

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

说明

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

FLOAT 还支持以下语法:

FLOAT(p) [UNSIGNED] [ZEROFILL]

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

DOUBLE

DOUBLE 用于表示正常大小(双精度)浮点数。语法如下:

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

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

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

说明

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

DOUBLE PRECISION

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

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


欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论