我有一列包含双值 42.2223。我想截断这个特定列的最后四位数字。
任何人都可以为这种特定情况提供配置单元 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();
}
}
}