配置单元仅选择前两位小数

fdbelqdn  于 2021-05-31  发布在  Hadoop
关注(0)|答案(3)|浏览(311)

配置单元仅选择前两位小数。

Input: columnA decimal datatype value is 57.698700000
Expected output should be 57.69

note:output should 不能四舍五入到下一个最高或最低值
目前我正在使用trunc(可乐,2),这是给我的输出为57.69000000000,但我的预期输出应该是57.69请帮助我在这之前谢谢

bq9c1y66

bq9c1y661#

这是自0.14版本以来配置单元的默认功能。根据刻度,它将考虑周期后的数字。如果你可以有规模为2,那么你的问题将得到解决。
有关更多详细信息,请查看此配置单元增强功能。
https://issues.apache.org/jira/browse/hive-7373
十进制(5,4)中的0将是0
十进制(5,4)中的0.0将是0.0
小数点(5,4)中的0.00将是0.00
十进制(5,4)中的0.00000000将是0.0000

jc3wubiy

jc3wubiy2#

这里有两种方法:

round(col - 0.005, 2)
 floor(col * 100) / 100.0
chy5wohz

chy5wohz3#

你可以用 ROUND 在Hive中起作用。
正如hive文档所说:

round(DOUBLE a, INT d)

Returns a rounded to d decimal places.

例如:

SELECT ROUND(58.3265487, 2) AS num_round;

+------------+--+
| num_round  |
+------------+--+
| 58.33      |
+------------+--+

SELECT ROUND(58.3265487, 3) AS num_round;

+------------+--+
| num_round  |
+------------+--+
| 58.327     |
+------------+--+

或者,如果要精确到小数点,可以尝试以下操作:

SELECT CAST(CONCAT(SPLIT(71.42857142857143, '\\.')[0],'.', SUBSTRING(SPLIT(71.42857142857143, '\\.')[1], 1, 2)) AS DECIMAL(10,2)) AS number_rounded;

+-----------------+--+
| number_rounded  |
+-----------------+--+
| 71.42           |
+-----------------+--+

相关问题