配置单元仅选择前两位小数。
Input: columnA decimal datatype value is 57.698700000Expected output should be 57.69
Input: columnA decimal datatype value is 57.698700000
Expected output should be 57.69
note:output should 不能四舍五入到下一个最高或最低值目前我正在使用trunc(可乐,2),这是给我的输出为57.69000000000,但我的预期输出应该是57.69请帮助我在这之前谢谢
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
jc3wubiy2#
这里有两种方法:
round(col - 0.005, 2) floor(col * 100) / 100.0
round(col - 0.005, 2)
floor(col * 100) / 100.0
chy5wohz3#
你可以用 ROUND 在Hive中起作用。正如hive文档所说:
ROUND
round(DOUBLE a, INT d)Returns a rounded to d decimal places.
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 ROUND(58.3265487, 2) AS num_round;
+------------+--+
| num_round |
| 58.33 |
SELECT ROUND(58.3265487, 3) AS 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 |+-----------------+--+
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 |
3条答案
按热度按时间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
jc3wubiy2#
这里有两种方法:
chy5wohz3#
你可以用
ROUND
在Hive中起作用。正如hive文档所说:
例如:
或者,如果要精确到小数点,可以尝试以下操作: