数值
数值宽度
| 名称 | 缩写 | 长度(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 | 整型,正无穷 ~ 负无穷 | |
| 大浮点数 | Decimal | 浮点数,正无穷 ~ 负无穷 |
默认数值宽度
数值表示的默认宽度,举例:var = 235 这个数即可是 byte 的也可能是 int 类型。
默认宽度是指在 DataQL 查询语句中,定义的数字类型数据所使用的:默认类型。
- 整数:
byte、short、int(默认)、long、big - 浮点数:
float、double(默认)、big
修改默认数值计算宽度
hint MIN_DECIMAL_WIDTH = 'double'
hint MIN_INTEGER_WIDTH = 'int'
tip
float 或者 double,由于其自身存储特性导致在做运算时出现精度丢失。这时建议将 MIN_DECIMAL_WIDTH 宽度提升为 big。
这样可以将浮点数就会以 Decimal 方式进行计算以解决精度丢失问题,但要注意性能损耗。
舍入问题
DataQL 两个浮点数计算时会默认保留 20 位小数。多余的小数部分将会以 四舍五入 方式进行进位。
修改修改浮点数计算舍入精度使用的 DataQL 语句
hint MAX_DECIMAL_DIGITS = 20
更换舍入规则使用的 DataQL 语句
hint NUMBER_ROUNDING = 'HALF_EVEN'
可选的舍入选项为(参见Hint:NUMBER_ROUNDING):
| 选项值 | 默认 | 含义 |
|---|---|---|
| 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 |