Hive 配置单元从双精度转换为字符串不在Scientific中

Hive 配置单元从双精度转换为字符串不在Scientific中,hive,Hive,我有一个具有列双精度类型的表,我正在尝试将其从双精度转换为字符串 然而,当我使用cast命令时,它“巧妙地”将其转换为科学符号。如下图所示: select number, cast(number as string), from ... 看起来像 number c1_ 9999999902 9.999999902E9 9999999902 9.999999902E9 9999999902 9.999999902E9 9999999902 9.9999999

我有一个具有列双精度类型的表,我正在尝试将其从双精度转换为字符串

然而,当我使用cast命令时,它“巧妙地”将其转换为科学符号。如下图所示:

select 
    number, 
    cast(number as string), 
from ...
看起来像

number     c1_
9999999902  9.999999902E9
9999999902  9.999999902E9
9999999902  9.999999902E9
9999999902  9.999999902E9
9999999909  9.999999909E9

有谁能告诉我如何避免将其转化为科学并保留原始文本

Hive在转换为字符串时将double转换为科学表示,因为Hive以相同的方式处理double本身。所以,问题不在于转换为字符串

请参见以下示例:

 select 9999999902.0, cast(9999999902.0 as BIGINT), cast(cast(9999999902.0 as BIGINT)  as string) from ..
输出:

OK
9.999999902E9   9999999902

Hive支持良好的旧
printf()
函数,以便您可以显式控制输出格式-请在“字符串函数”下进行检查
cast(cast(数字为BIGINT)为字符串)
可能?DOUBLE是邪恶的。无论您使用的是什么数据库(Hive、Oracle、MySkull等),它都是邪恶的。对于双精度,999.99+0.01-1000不等于零。当您完全不知道数据的规模和精度时,请将其作为最后手段使用,并提供详细的代码来处理舍入错误。=>从Hive 0.13开始,您可以使用十进制(x,y)数据类型,最后:-)printf('%.2f',data_列)helped感谢您实际提供了问题的答案!