我需要在Hive中将小数点位置向左或向右移动而不四舍五入

时间:2018-10-24 13:48:52

标签: sql function hadoop hive decimal

我有一个电话号码(可能是12345或123.45)。

我需要在Hive中将小数点位置向左或向右移动,而不四舍五入。

问题1

select 1001.123*POW(10,-2);

10.011230000000001

select 1001.123/100;

10.011230000000001

但是我希望这是10.01123。

问题2

但是如果是下面这样的情况,那么

select 1000*POW(10,-2);

10.00

请向我建议一些功能或过程。

2 个答案:

答案 0 :(得分:0)

您可以尝试以下一种。

SELECT CASE WHEN @value <> CEILING(@value) THEN Str(@value, 12, 4) ELSE Str(@value, 12, 2) END

答案 1 :(得分:0)

在Hive中,我无法获得任何函数,如果不对零进行调整,该函数将给我精确除法。因此,我是使用BigDecimal在Java中完成的。

BigDecimal值=新的BigDecimal(“ 1001.123”); BigDecimal newValue = value.scaleByPowerOfTen(-2);

OP:10.01123

BigDecimal值=新的BigDecimal(“ 1000”); BigDecimal newValue = value.scaleByPowerOfTen(-2);

OP:10.00

谢谢您的帮助!