【发布时间】:2016-10-19 04:49:39
【问题描述】:
我有一列包含双精度值 42.2223。我想截断这个特定列的最后四位数字。
任何人都可以为这个特定场景提供 hive UDF 吗?
【问题讨论】:
标签: hive-udf
我有一列包含双精度值 42.2223。我想截断这个特定列的最后四位数字。
任何人都可以为这个特定场景提供 hive UDF 吗?
【问题讨论】:
标签: hive-udf
如果您想截断最后四位数字并获得一个整数,您可以使用内置函数floor(double a) 或ceiling(double a),具体取决于您想要的舍入类型(大写或小写)。
如果您希望将您的双精度数截断为 d 小数位(并获得双精度数,而不是整数),您可以使用 round(double a, int d)。
已编辑
为了舍入而不截断,可以使用这个
CAST((column * 100) AS int)/100
【讨论】:
35?
CAST((column * 100) AS int)/100
为上述问题编写了一个 UDF,我们可以指定可以截断的字符数
package com.hive.udf.truncate;
import java.math.BigDecimal;
import org.apache.hadoop.hive.ql.exec.UDF;
public class Trunc extends UDF {
public double evaluate(double input,int numberOfDecimals){
if ( input > 0) {
return new BigDecimal(String.valueOf(input)).setScale(numberOfDecimals, BigDecimal.ROUND_FLOOR).doubleValue();
}
else {
return new BigDecimal(String.valueOf(input)).setScale(numberOfDecimals, BigDecimal.ROUND_CEILING).doubleValue();
}
}
}
【讨论】: