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

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


The following commit(s) were added to refs/heads/master by this push:
     new 624c63aec7 [INLONG-11214][SDK] Modify the problem of incomplete 
division in DivisionParser (#11215)
624c63aec7 is described below

commit 624c63aec770a3371c78035924c09134d0dff7d6
Author: Zkplo <87751516+zk...@users.noreply.github.com>
AuthorDate: Tue Oct 8 18:55:44 2024 +0800

    [INLONG-11214][SDK] Modify the problem of incomplete division in 
DivisionParser (#11215)
    
    Co-authored-by: ZKpLo <14148880+zk...@user.noreply.gitee.com>
---
 .../sdk/transform/process/parser/DivisionParser.java    | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/parser/DivisionParser.java
 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/parser/DivisionParser.java
index 343481372e..14eb92c37b 100644
--- 
a/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/parser/DivisionParser.java
+++ 
b/inlong-sdk/transform-sdk/src/main/java/org/apache/inlong/sdk/transform/process/parser/DivisionParser.java
@@ -24,10 +24,10 @@ import 
org.apache.inlong.sdk.transform.process.operator.OperatorTools;
 import net.sf.jsqlparser.expression.operators.arithmetic.Division;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 
 /**
  * DivisionParser
- * 
  */
 @TransformParser(values = Division.class)
 public class DivisionParser implements ValueParser {
@@ -36,23 +36,24 @@ public class DivisionParser implements ValueParser {
 
     private ValueParser right;
 
+    private final int DEFAULT_SCALE_DIFFERENCE = 4;
+
     public DivisionParser(Division expr) {
         this.left = OperatorTools.buildParser(expr.getLeftExpression());
         this.right = OperatorTools.buildParser(expr.getRightExpression());
     }
 
-    /**
-     * parse
-     * @param sourceData
-     * @param rowIndex
-     * @return
-     */
     @Override
     public Object parse(SourceData sourceData, int rowIndex, Context context) {
         Object leftObj = this.left.parse(sourceData, rowIndex, context);
         Object rightObj = this.right.parse(sourceData, rowIndex, context);
         BigDecimal leftValue = OperatorTools.parseBigDecimal(leftObj);
         BigDecimal rightValue = OperatorTools.parseBigDecimal(rightObj);
-        return leftValue.divide(rightValue);
+        try {
+            return leftValue.divide(rightValue);
+        } catch (Exception e) {
+            int scale = Math.max(leftValue.scale(), rightValue.scale()) + 
DEFAULT_SCALE_DIFFERENCE;
+            return leftValue.divide(rightValue, scale, RoundingMode.HALF_UP);
+        }
     }
 }

Reply via email to