From c1b34736b6650c19c30770c36d176cd4115bee90 Mon Sep 17 00:00:00 2001 From: qianlei01 Date: Thu, 6 Feb 2025 15:11:49 +0800 Subject: [PATCH] optimizing the binaryToDecimal function --- .../java/org/apache/parquet/pig/convert/DecimalUtils.java | 8 +------- .../java/org/apache/parquet/pig/TestDecimalUtils.java | 4 ++-- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/parquet-pig/src/main/java/org/apache/parquet/pig/convert/DecimalUtils.java b/parquet-pig/src/main/java/org/apache/parquet/pig/convert/DecimalUtils.java index dd9d995731..8282d8d8a6 100644 --- a/parquet-pig/src/main/java/org/apache/parquet/pig/convert/DecimalUtils.java +++ b/parquet-pig/src/main/java/org/apache/parquet/pig/convert/DecimalUtils.java @@ -19,8 +19,6 @@ package org.apache.parquet.pig.convert; -import static java.lang.Math.pow; - import java.math.BigDecimal; import java.math.BigInteger; import java.nio.ByteBuffer; @@ -53,11 +51,7 @@ public static BigDecimal binaryToDecimal(Binary value, int precision, int scale) } int bits = 8 * (end - start); long unscaledNew = (unscaled << (64 - bits)) >> (64 - bits); - if (unscaledNew <= -pow(10, 18) || unscaledNew >= pow(10, 18)) { - return new BigDecimal(unscaledNew); - } else { - return BigDecimal.valueOf(unscaledNew / pow(10, scale)); - } + return BigDecimal.valueOf(unscaledNew, scale); } else { return new BigDecimal(new BigInteger(value.getBytes()), scale); } diff --git a/parquet-pig/src/test/java/org/apache/parquet/pig/TestDecimalUtils.java b/parquet-pig/src/test/java/org/apache/parquet/pig/TestDecimalUtils.java index 50b2889ddd..401754a82c 100644 --- a/parquet-pig/src/test/java/org/apache/parquet/pig/TestDecimalUtils.java +++ b/parquet-pig/src/test/java/org/apache/parquet/pig/TestDecimalUtils.java @@ -60,12 +60,12 @@ public void testBinaryToDecimal() throws Exception { // Test LONG testDecimalConversion(Long.MAX_VALUE, 19, 0, "9223372036854775807"); testDecimalConversion(Long.MIN_VALUE, 19, 0, "-9223372036854775808"); - testDecimalConversion(0L, 0, 0, "0.0"); + testDecimalConversion(0L, 0, 0, "0"); // Test INTEGER testDecimalConversion(Integer.MAX_VALUE, 10, 0, "2147483647"); testDecimalConversion(Integer.MIN_VALUE, 10, 0, "-2147483648"); - testDecimalConversion(0, 0, 0, "0.0"); + testDecimalConversion(0, 0, 0, "0"); // Test DOUBLE testDecimalConversion(12345678912345678d, 17, 0, "12345678912345678");