数值数据类型

更新时间:2023-07-18 17:25:59

数值数据类型使用数值字面量指定固定数和浮点数的值,同时支持 0、无限和非数字("Not a Number" 或者 NaN)。本节主要介绍数字类型(NUMBER)和浮点数字。

数字类型(NUMBER)

NUMBER 数据类型存储定点数和浮点数。该类型可以存储几乎任何数量级的数字。

  • 精度(Precision)

    精度用来表示数字的总位数。如果未指定精度,按提供原始值存储,不进行任何四舍五入。

  • 小数位数(Scale)

    小数位数指定从小数点到最低有效位的位数。正小数位数计算小数点右侧的数字,直到最低有效数字。负小数位数计算小数点左侧的数字。如果您指定一个没有小数位数的精度,例如 NUMBER(6) ,则小数位数为 0。

数字字面量最大可以储存精度为 38 位的数字。如果字面量要求的精度比 NUMBERBINARY_FLOATBINARY_DOUBLE 所提供的精度更高,则 OceanBase 数据库将截断该值。如果字面量的范围超出 NUMBERBINARY_FLOATBINARY_DOUBLE 支持的范围,则 OceanBase 数据库会抛出错误。

例如,NUMBER(8,2) 表示精度为 8,小数位数为 2。因此,数据库将 100,000 存储为 100000.00。

以下是一些有效的 NUMBER 类型的数字:

12 
+6.87 
0.5 
25e-03 
-9

以下是一些有效的 FLOAT-Point 类型的浮点数:

25f 
+6.34F 
0.5d 
-1D

浮点数字

OceanBase 数据库专门为浮点数提供两种数值数据类型:BINARY_FLOATBINARY_DOUBLE

这些类型支持 NUMBER 数据类型提供的所有基本功能。但是,NUMBER 使用十进制精度,而 BINARY_FLOATBINARY_DOUBLE 使用二进制精度,这可以实现更快的算术计算并且通常会降低存储要求。

BINARY_FLOATBINARY_DOUBLE 是近似数值数据类型。它们存储十进制值的近似表示,而不是精确表示。例如,值 0.1 不能由 BINARY_DOUBLEBINARY_FLOAT 精确表示。它们经常用于科学计算。它们的行为类似于 Java 中的数据类型 FLOATDOUBLE

以下是一些有效的浮点数字:

1.2
-1.1
0.

数值数据类型除了提供数字浮点类型外,还提供了正负无穷和非数字(not a number / NaN) 等特殊表示。详细信息如下:

  • binary_double_infinity

  • binary_double_nan

  • binary_float_infinity

  • binary_float_nan