数值

表示范围

名称缩写长度(Bit)取之范围
字节型byte8-128 ~ 127
短整型sort16-32768 ~ 32768
整型int32-2147483648 ~ 2147483648
长整型long64-9233372036854477808 ~ 9233372036854477808
浮点型float32-3.40292347E+38 ~ 3.40292347E+38
双精度double64-1.79769313486231570E+308 ~ 1.79769313486231570E+308
大整数BigInt-java.math.BigInt 以Java为参照
大浮点数Decimal-java.math.BigDecimal 以Java为参照

默认数值宽度

数值表示的默认宽度,举例:var = 235 这个数即可是 byte 的也可能是 int 类型。 默认宽度是指在 DataQL 查询语句中,定义的数字类型数据所使用的默认类型。

  • 数值宽度定义
    • 整数:byteshortint(默认)longbig

    • 浮点数:floatdouble(默认)big

  • 修改默认数值计算宽度使用的 DataQL 语句

    • hint MIN_DECIMAL_WIDTH = 'double'

    • hint MIN_INTEGER_WIDTH = 'int'

提示

单精度float或者双精度double,由于其自身存储特性导致在做运算时出现精度丢失。这时建议将 MIN_DECIMAL_WIDTH 宽度提升为 big。这样可以将浮点数就会以 Decimal 方式进行计算以解决精度丢失问题。但要注意性能损耗。

舍入问题

DataQL 两个浮点数计算时会默认保留 20 位小数。多余的小数部分将会以 四舍五入 方式进行进位。

  • 修改修改浮点数计算舍入精度使用的 DataQL 语句
    • hint MAX_DECIMAL_DIGITS = 20
  • 更换舍入规则使用的 DataQL 语句

    • hint NUMBER_ROUNDING = 'HALF_EVEN'

UP:向远离零的方向舍入。舍弃非零部分,并将非零舍弃部分相邻的一位数字加一。

DOWN:向接近零的方向舍入。舍弃非零部分,同时不会非零舍弃部分相邻的一位数字加一,采取截取行为。

CEILING:向正无穷的方向舍入。如果为正数,舍入结果同ROUND_UP一致;如果为负数,舍入结果同ROUND_DOWN一致。注意:此模式不会减少数值大小。

FLOOR:向负无穷的方向舍入。如果为正数,舍入结果同ROUND_DOWN一致;如果为负数,舍入结果同ROUND_UP一致。注意:此模式不会增加数值大小。

HALF_UP:向“最接近”的数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。如果舍弃部分>= 0.5,则舍入行为与ROUND_UP相同;否则舍入行为与ROUND_DOWN相同。这种模式也就是我们常说的我们的“四舍五入”。

HALF_DOWN:向“最接近”的数字舍入,如果与两个相邻数字的距离相等,则为向下舍入的舍入模式。如果舍弃部分> 0.5,则舍入行为与ROUND_UP相同;否则舍入行为与ROUND_DOWN相同。这种模式也就是我们常说的我们的“五舍六入”。

HALF_EVEN:向“最接近”的数字舍入,如果与两个相邻数字的距离相等,则相邻的偶数舍入。如果舍弃部分左边的数字奇数,则舍入行为与 ROUND_HALF_UP 相同;如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。注意:在重复进行一系列计算时,此舍入模式可以将累加错误减到最小。此舍入模式也称为“银行家舍入法”,主要在美国使用。四舍六入,五分两种情况,如果前一位为奇数,则入位,否则舍去。

UNNECESSARY:断言请求的操作具有精确的结果,因此不需要舍入。如果对获得精确结果的操作指定此舍入模式,则抛出 ArithmeticException。