我有一个包含双精度值42.2223的列。我想截断这一列的最后四位。
有谁能提供这个特定场景的hive UDF吗?
如果您想截断最后四位数字并得到一个整数,您可以使用内置函数floor(double a)
或ceiling(double a)
,这取决于您想要的舍入类型(上或下)。
如果您希望将您的双精度体截断到小数点后d
位(并获得双精度体,而不是整数),您可以使用round(double a, int d)
。
为了不截断取整,可以使用
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();
}
}
}