hadoop 即使在指定Decimal(38,18)之后,配置单元也会自动将小数位数18舍入为小数位数15

pb3s4cty  于 2022-11-01  发布在  Hadoop
关注(0)|答案(1)|浏览(302)

查询

  1. select CAST((123456789876567898/1000000000000000000) as decimal(38,18));

测试结果

  1. 0.123456789876568

预期结果

  1. 0.123456789876567898

有人能帮忙吗?

fjnneemd

fjnneemd1#

在转换除法结果之前,需要分别转换它们。
下面的SQL将给你预期的结果。

  1. select CAST((
  2. cast(123456789876567898 as decimal(38,18))/
  3. cast(1000000000000000000 as decimal(38,18))) as decimal(38,18));

原因-当您计算a/b时,配置单元计算并生成双精度结果,当您尝试将其转换为十进制(38,18)时,它会显示截断值。

当您将它们显式转换为十进制时,配置单元以十进制计算所有内容并以十进制生成结果当您再次将结果转换为十进制时,不会发生数据丢失

相关问题