数值
表示范围
名称 | 缩写 | 长度(Bit) | 取之范围 |
字节型 | byte | 8 | -128 ~ 127 |
短整型 | sort | 16 | -32768 ~ 32768 |
整型 | int | 32 | -2147483648 ~ 2147483648 |
长整型 | long | 64 | -9233372036854477808 ~ 9233372036854477808 |
浮点型 | float | 32 | -3.40292347E+38 ~ 3.40292347E+38 |
双精度 | double | 64 | -1.79769313486231570E+308 ~ 1.79769313486231570E+308 |
大整数 | BigInt | - | java.math.BigInt 以Java为参照 |
大浮点数 | Decimal | - | java.math.BigDecimal 以Java为参照 |
默认数值宽度
数值表示的默认宽度,举例:var = 235 这个数即可是 byte 的也可能是 int 类型。 默认宽度是指在 DataQL 查询语句中,定义的数字类型数据所使用的默认类型。
- 数值宽度定义
整数:
byte
、short
、int(默认)
、long
、big
浮点数:
float
、double(默认)
、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。