数值数据类型使用数值字面量指定固定数和浮点数的值,同时支持 0、无限和非数字("Not a Number" 或者 NaN)。本节主要介绍数字类型(NUMBER)和浮点数字。
数字类型(NUMBER)
NUMBER
数据类型存储定点数和浮点数。该类型可以存储几乎任何数量级的数字。
精度(Precision)
精度用来表示数字的总位数。如果未指定精度,按提供原始值存储,不进行任何四舍五入。
小数位数(Scale)
小数位数指定从小数点到最低有效位的位数。正小数位数计算小数点右侧的数字,直到最低有效数字。负小数位数计算小数点左侧的数字。如果您指定一个没有小数位数的精度,例如
NUMBER(6)
,则小数位数为 0。
数字字面量最大可以储存精度为 38 位的数字。如果字面量要求的精度比 NUMBER
、BINARY_FLOAT
或 BINARY_DOUBLE
所提供的精度更高,则 OceanBase 数据库将截断该值。如果字面量的范围超出 NUMBER
、BINARY_FLOAT
或 BINARY_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_FLOAT
和 BINARY_DOUBLE
。
这些类型支持 NUMBER
数据类型提供的所有基本功能。但是,NUMBER
使用十进制精度,而 BINARY_FLOAT
和 BINARY_DOUBLE
使用二进制精度,这可以实现更快的算术计算并且通常会降低存储要求。
BINARY_FLOAT
和 BINARY_DOUBLE
是近似数值数据类型。它们存储十进制值的近似表示,而不是精确表示。例如,值 0.1 不能由 BINARY_DOUBLE
或 BINARY_FLOAT
精确表示。它们经常用于科学计算。它们的行为类似于 Java 中的数据类型 FLOAT
和 DOUBLE
。
以下是一些有效的浮点数字:
1.2
-1.1
0.
数值数据类型除了提供数字浮点类型外,还提供了正负无穷和非数字(not a number / NaN) 等特殊表示。详细信息如下:
binary_double_infinity
binary_double_nan
binary_float_infinity
binary_float_nan