在Hive里,我进行了一些操作测试,得到了一种我无法理解的行为。在执行该操作时,hive将返回逗号后带有17位小数的以下结果:
select 500/3260; > 0.15337423312883436
但当我要用十进制格式转换它时,结果是:
select cast(500 as decimal(38,18)) / cast(3260 as decimal(38,18)); > 0.153374
我想有18位小数,但只有6位显示。你能解释一下为什么会有这个结果吗?事先谢谢你的帮助。
ego6inou1#
我认为这是由于这里详细介绍的十进制除法规则。这个链接是针对sql server的,但是这里显示的行为显然是相同的。如果大于6,并且整数部分大于32,则刻度将设置为6。在这种情况下,整数部分和小数位数都会减少,结果类型是decimal(38,6)。结果可能会四舍五入到小数点后6位,如果整数部分不能放入32位,则会引发溢出错误。此配置单元文档(第3页)中引用了sql server实现。
1条答案
按热度按时间ego6inou1#
我认为这是由于这里详细介绍的十进制除法规则。这个链接是针对sql server的,但是这里显示的行为显然是相同的。
如果大于6,并且整数部分大于32,则刻度将设置为6。在这种情况下,整数部分和小数位数都会减少,结果类型是decimal(38,6)。结果可能会四舍五入到小数点后6位,如果整数部分不能放入32位,则会引发溢出错误。
此配置单元文档(第3页)中引用了sql server实现。