You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by ni...@apache.org on 2020/01/27 14:16:51 UTC

[kylin] 05/05: minor, should use BigDecimal.valueOf instead of constructor to avoid imprecision

This is an automated email from the ASF dual-hosted git repository.

nic pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kylin.git

commit c5192c4b1b5012d5e6eabeda303ae98c9b68bcc0
Author: etherge <et...@163.com>
AuthorDate: Fri Jan 24 10:22:00 2020 -0500

    minor, should use BigDecimal.valueOf instead of constructor to avoid imprecision
---
 .../src/main/java/org/apache/kylin/common/util/DecimalUtil.java    | 7 ++++---
 .../src/main/java/org/apache/kylin/metadata/tuple/Tuple.java       | 2 +-
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/core-common/src/main/java/org/apache/kylin/common/util/DecimalUtil.java b/core-common/src/main/java/org/apache/kylin/common/util/DecimalUtil.java
index 0891960..e92cfff 100644
--- a/core-common/src/main/java/org/apache/kylin/common/util/DecimalUtil.java
+++ b/core-common/src/main/java/org/apache/kylin/common/util/DecimalUtil.java
@@ -32,9 +32,10 @@ public class DecimalUtil {
         // There are some values of "long" that cannot be represented as "double".
         // Not so "int". If it isn't a long, go straight to double.
         return number instanceof BigDecimal ? (BigDecimal) number
-                : number instanceof BigInteger ? new BigDecimal((BigInteger) number)
-                        : number instanceof Long ? new BigDecimal(number.longValue())
-                                : new BigDecimal(number.doubleValue());
+                : number instanceof Integer ? new BigDecimal((Integer) number)
+                        : number instanceof BigInteger ? new BigDecimal((BigInteger) number)
+                                : number instanceof Long ? new BigDecimal(number.longValue())
+                                        : BigDecimal.valueOf(number.doubleValue());
     }
 
     public static BigDecimal toBigDecimal(Object o) {
diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/tuple/Tuple.java b/core-metadata/src/main/java/org/apache/kylin/metadata/tuple/Tuple.java
index 86db79b..6a0cda9 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/tuple/Tuple.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/tuple/Tuple.java
@@ -119,7 +119,7 @@ public class Tuple implements ITuple {
             if (fieldValue instanceof BigDecimal) {
                 fieldValue = normalizeDecimal((BigDecimal) fieldValue);
             } else if (fieldValue instanceof Number) {
-                fieldValue = new BigDecimal(((Number) fieldValue).doubleValue());
+                fieldValue = BigDecimal.valueOf(((Number) fieldValue).doubleValue());
             }
         } else if ("float".equals(dataType) && fieldValue instanceof BigDecimal) {
             fieldValue = ((BigDecimal) fieldValue).floatValue();