Phoenix 数据类型 decimal 注意事项

官方介绍:

Data type with fixed precision and scale. A user can specify precision and scale by expression DECIMAL(precision,scale) in a DDL statement, for example, DECIMAL(10,2). The maximum precision is 38 digits. Mapped to java.math.BigDecimal. The binary representation is binary comparable, variable length format. When used in a row key, it is terminated with a null byte unless it is the last column.

Example:

DECIMAL

DECIMAL(10,2)


翻译成人话如下:

    Phoenix 的 decimal  类型和 java 的 BigDecimal 类型是一回事, 用于表示不可变的、任意精度的有符号十进制数。

    使用形式为: DECIMAL(precision,scale)

    可以设置两个参数: precision,scale

    precision 表示精度, 也就是有效数字, 也可以说是整数部分加小数部分的位数

    scale 表示保留小数的位数


工作中使用的时候遇到了一些问题, 记录一下.

    1. 小数后面的0会自动省略

        如:  类型: decimal(5,3)   存入数: 0.060, 实际会省略最后一位0, 保存的是0.06, 对位数有严格要求的情况下不适用

    2. 遇到10的倍数的整数, 会自动以科学计数法保存数据

        如: 类型 decimal(12,2)   存入数:13200.00 , 实际存的是 1.32E+4, 对格式有严格要求的也不行

    3. The data exceeds the max capacity for the data type. 数据超出最大范围的问题

        例如: decimal(5,3)  精度是5, 3位小数, 

                则表明整数部分最多只能有两位, 因为只能有5位有效数字, 小数占了3位, 整数部分就最多只能有2位了

                正确: 25.340435,  33.324546

                错误: 210.3445,  213.1,   324.3404, 234  (没有小数部分的三位整数也是错的, 超范围了)


    


你可能感兴趣的:(Phoenix)