精确数值类型-Decimal类型

Decimal数据类型用来存储精确的数值。精确数值类型在需要用到非常准确的数值精度的场景下使用,比如银行账户数字,或者严谨的科学计算等。 在Decimal的列名声明中,整数和小数部分一般都会进行声明。比如以下例子:

  1. salary DECIMAL(5,2)

在这个案例中,5是整数位,2是小数位。整数精度表示整数值部分存储的有效位数,小数精度表示小数部分存储的有效位数。 标准SQL要求DECIMAL(5,2)需要存储5位数字,2位小数,因此如果以该形式表示的工资列数字取值范围应该在-999.99到999.99之间。 在MatrixOne的语法中,DECIMAL(M)与DECIMAL(M,0)是相同的。如果直接只声明DECIMAL的话,语法也将解析成DECIMAL(M,0)的形式,M的默认值为10。 如果小数精度为0的话,DECIMAL相当于纯整数,不含任何小数。 MatrixOne中DECIMAL类型的最大位数为38位。另外DECIMAL中指定的整数或小数位数在实际列被赋值的时候超出指定范围,实际数值将会被自动转换成相应精度。

Decimal数据类型特点

该部分内容主要介绍Decimal数据类型的一些特点,尤其是在位数精度和存储形式上的。

DECIMAL列的声明语法是DECIMAL(M, D). M是整数的位数,取值范围是1到38,D是小数位数,取值范围是1到38,但是不能大于M。 如果不指定D,默认为0。如果不指定M,默认为10。

DECIMAL列的数值以二进制的形式进行存储,在MatrixOne内部,只有decimal64和decimal128这两种表示形式。在0-18位精度内,一个Decimal数值占用8个字节的存储空间,在19-38位精度内,一个Decimal数值占用16个字节的存储空间。

位数字节数
0-188个字节
19-3816个字节

对于详细的Decimal类型实现方法,可以参考Decimal的设计文档