Hive从Double转换为String不是科学的

B.M*_*.W. 4 hive

我有一个列双列类型的表,我试图将其从double转换为字符串.

但是,当我使用cast命令时,它"巧妙地"将其转换为科学记数法.如下:

select 
    number, 
    cast(number as string), 
from ...
Run Code Online (Sandbox Code Playgroud)

看起来像

number     c1_
9999999902  9.999999902E9
9999999902  9.999999902E9
9999999902  9.999999902E9
9999999902  9.999999902E9
9999999909  9.999999909E9
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我如何避免将其转化为科学并保留原始文本?

Sam*_*ter 10

Hive支持良好的旧printf()函数,因此您可以显式控制输出格式- 在"字符串函数"下检查语言手册UDF

  • printf('%.2f',data_column)得到了帮助 (3认同)

小智 7

Hive将双重转换为科学表示,同时转换为字符串,因为Hive以同样的方式处理double本身.因此,问题不在于转换为字符串.

见下面的例子:

 select 9999999902.0, cast(9999999902.0 as BIGINT), cast(cast(9999999902.0 as BIGINT)  as string) from ..
Run Code Online (Sandbox Code Playgroud)

输出:

OK
9.999999902E9   9999999902
Run Code Online (Sandbox Code Playgroud)