Gauss100 支持基本的双精度浮点数据类型double,该类型遵循IEEE 754标准二进制浮点数算术的一般实现,外加下层处理器、操作系统和编译器对它的支持。
该数据类型是不精确的、变精度的数字类型,不精确意味着一些数值不能精确地转换成内部格式并且是以近似值存储的,因此存储后再把数据打印出来可能有一些差异。因此使用该数据类型时需要注意以下几点:
如果要求精确的计算(比如金融业务),应使用Number/Decimal类型。
对两个浮点数值进行比较时,可能不会得出预期的结果。
在并行查询中,数据行不是按顺序读出,因此每次对含有浮点数的列求和(sum)、求均值(avg)等时,可能会得出不同的结果。
特别注意,在较大浮点数加上/减去一个较小浮点数时,由于精度不够会导致结果不符。
BINARY_DOUBLE
语法:
BINARY_DOUBLE
功能:存储64位双精度浮点数。
占用空间:8字节。
取值范围:[-1.79E+308, +1.79E+308]
DOUBLE
语法:
DOUBLE
功能:
USE_NATIVE_DATATYPE=TRUE时映射为BINARY_DOUBLE类型。
USE_NATIVE_DATATYPE = FALSE时映射为NUMBER类型。
对应关键字:
REAL
DOUBLE
FLOAT
BINARY_DOUBLE
FLOAT
语法:
FLOAT
功能:
USE_NATIVE_DATATYPE=TRUE时映射为BINARY_DOUBLE类型。
USE_NATIVE_DATATYPE = FALSE时映射为NUMBER类型。
对应关键字:
REAL
DOUBLE
FLOAT
BINARY_DOUBLE
REAL
语法:
REAL
功能:
USE_NATIVE_DATATYPE=TRUE时映射为BINARY_DOUBLE类型。
USE_NATIVE_DATATYPE = FALSE时映射为NUMBER类型。
占用空间:8字节。
对应关键字:
REAL
DOUBLE
FLOAT
BINARY_DOUBLE
由于浮点数不精确,其上下界也不是一个太精确的值,因此在测试其上下界时,要特别注意。 不能直接使用select cast(1E308 as real) + 1 from dual;来测试,这是计算机底层的定义浮点数的问题,与Gauss100 OLTP的具体实现无关。
对于double数据类型,若结果溢出则报错。