我有一个包含双值42.2223的列。我想截断这个特定列的后四位数。
任何人都可以为此特定场景提供配置UDF吗?
答案 0 :(得分:0)
如果要截断最后四位数并获得整数,可以使用内置函数floor(double a)
或ceiling(double a)
,具体取决于舍入的类型(上限或下限)你想要的。
如果您希望将double缩减为d
小数位(并获得双精度而不是整数),则可以使用round(double a, int d)
。
EDITED
为了在不截断的情况下进行舍入,您可以使用此
CAST((column * 100) AS int)/100
答案 1 :(得分:0)
为上述问题写了一个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();
}
}
}