【问题标题】:Hive Converting from Double to String Not in ScientificHive 从 Double 转换为 String 不科学
【发布时间】:2015-09-15 01:19:13
【问题描述】:

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

但是,当我使用 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

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

【问题讨论】:

  • cast(cast(number as BIGINT) as STRING) 也许?
  • DOUBLE 是邪恶的。无论您使用什么数据库(Hive、Oracle、MySkull 等),它都是邪恶的。对于 DOUBLE,999.99+0.01-1000 不等于 0。仅将其用作最后的手段,当您完全不知道数据的规模和精度时,并提供冗长的代码来处理舍入错误。 ===> 从 Hive 0.13 开始,您终于可以使用 DECIMAL(x,y) 数据类型了 :-)

标签: hive


【解决方案1】:

Hive 支持良好的旧 printf() 函数,以便您可以显式地控制输出格式 - 检查“字符串函数”下的 Language Manual UDF

【讨论】:

  • printf('%.2f',data_column) 帮助
  • 感谢您实际提供问题的答案!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多