0

我有一列包含双值 42.2223。我想截断这个特定列的最后四位数字。

任何人都可以为这种特定情况提供配置单元 UDF 吗?

4

2 回答 2

0

如果您想截断最后四位数字并获得一个整数,您可以使用内置函数floor(double a)ceiling(double a),具体取决于您想要的舍入类型(大写或小写)。

如果您希望您的双精度被截断到d小数位(并获得双精度,而不是整数),您可以使用round(double a, int d).

已编辑

为了不截断舍入,你可以使用这个

CAST((column * 100) AS int)/100

于 2016-10-19T06:35:06.177 回答
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();
        }
    }
}
于 2016-10-20T07:44:34.710 回答