Index: ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMultiply.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMultiply.java (revision 1423224) +++ ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPMultiply.java (working copy) @@ -26,6 +26,7 @@ import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; +import java.math.BigDecimal; /** * UDFOPMultiply. * @@ -92,7 +93,11 @@ return null; } - floatWritable.set(a.get() * b.get()); + BigDecimal aBig = new BigDecimal(String.valueOf(a.get())); + BigDecimal bBig = new BigDecimal(String.valueOf(b.get())); + aBig = aBig.multiply(bBig); + + floatWritable.set(aBig.floatValue()); return floatWritable; } @@ -104,7 +109,11 @@ return null; } - doubleWritable.set(a.get() * b.get()); + BigDecimal aBig = new BigDecimal(String.valueOf(a.get())); + BigDecimal bBig = new BigDecimal(String.valueOf(b.get())); + aBig = aBig.multiply(bBig); + + doubleWritable.set(aBig.doubleValue()); return doubleWritable; } } Index: ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPDivide.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPDivide.java (revision 1423224) +++ ql/src/java/org/apache/hadoop/hive/ql/udf/UDFOPDivide.java (working copy) @@ -22,6 +22,8 @@ import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.hive.serde2.io.DoubleWritable; +import java.math.BigDecimal; +import java.math.RoundingMode; /** * UDFOPDivide. * @@ -43,7 +45,11 @@ return null; } - doubleWritable.set(a.get() / b.get()); + BigDecimal aBig = new BigDecimal(String.valueOf(a.get())); + BigDecimal bBig = new BigDecimal(String.valueOf(b.get())); + aBig = aBig.divide(bBig, 10, RoundingMode.HALF_DOWN); + + doubleWritable.set(aBig.doubleValue()); return doubleWritable; } }