impala 中 cast 函数进行数据类型的转换导致结果错误?

问答 liwei131313 ⋅ 于 2018-02-27 11:19:11 ⋅ 最后回复由 青牛 2018-02-27 18:39:33 ⋅ 6630 阅读

表中的某个字段同udfs函数进行相乘,然后再使用cast函数进行数据类型转换,发现结果比真实的结果小0.01,如下图所示:
file

这个结果不正确的原因,有谁知道吗?

附言 0  ·  2018-02-28 09:23:31

查找到原因了。
因为udfs函数获取汇率的返回值为double类型,double类型的字段乘以decmial类型的字段,结果数据也为double类型,使用cast函数对double类型进行转换为decimal类型,结果就有可能出现错误的情况。
如下所示:
[master:21000] > select cast(cast(291328.29 as double) as decimal(16,2));
Query: select cast(cast(291328.29 as double) as decimal(16,2))
Query submitted at: 2018-02-27 14:59:22 (Coordinator: http://master:25000)
Query progress can be monitored at: http://master:25000/query_plan?query_id=ee4756fa52bdbeea:dee570ad00000000
+--------------------------------------------------+
| cast(cast(291328.29 as double) as decimal(16,2)) |
+--------------------------------------------------+
| 291328.28 |
+--------------------------------------------------+
Fetched 1 row(s) in 0.02s
[master:21000] > select cast(cast(291328.28 as double) as decimal(16,2));
Query: select cast(cast(291328.28 as double) as decimal(16,2))
Query submitted at: 2018-02-27 15:02:23 (Coordinator: http://master:25000)
Query progress can be monitored at: http://master:25000/query_plan?query_id=2e462958268f7e04:802b9d9f00000000
+--------------------------------------------------+
| cast(cast(291328.28 as double) as decimal(16,2)) |
+--------------------------------------------------+
| 291328.28 |
+--------------------------------------------------+
Fetched 1 row(s) in 0.01s

成为第一个点赞的人吧 :bowtie:
回复数量: 1
  • 青牛 海汼部落创始人,80后程序员一枚,曾就职于金山,喜欢倒腾技术做产品
    2018-02-27 18:39:33

    可能是java浮点数计算的问题

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
Ctrl+Enter