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

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


The following commit(s) were added to refs/heads/master by this push:
     new bf50f9fa7f [fix](decimal) fix cast rounding half up with negative 
number (#22450)
bf50f9fa7f is described below

commit bf50f9fa7f5422f2f8cdf5ea3e4167744c480f16
Author: Mryange <59914473+mrya...@users.noreply.github.com>
AuthorDate: Tue Aug 1 21:47:42 2023 +0800

    [fix](decimal) fix cast rounding half up with negative number (#22450)
---
 be/src/vec/data_types/data_type_decimal.h            |  6 +++++-
 .../data/correctness/test_cast_as_decimalv3.out      | 12 ++++++++++++
 .../suites/correctness/test_cast_as_decimalv3.groovy | 20 +++++++++++++++++++-
 3 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/be/src/vec/data_types/data_type_decimal.h 
b/be/src/vec/data_types/data_type_decimal.h
index 21d899e620..7417d884c0 100644
--- a/be/src/vec/data_types/data_type_decimal.h
+++ b/be/src/vec/data_types/data_type_decimal.h
@@ -505,7 +505,11 @@ void convert_decimal_cols(
         MaxNativeType multiplier =
                 DataTypeDecimal<MaxFieldType>::get_scale_multiplier(scale_from 
- scale_to);
         for (size_t i = 0; i < sz; i++) {
-            vec_to[i] = (vec_from[i] + multiplier / 2) / multiplier;
+            if (vec_from[i] >= 0) {
+                vec_to[i] = (vec_from[i] + multiplier / 2) / multiplier;
+            } else {
+                vec_to[i] = (vec_from[i] - multiplier / 2) / multiplier;
+            }
         }
     }
 
diff --git a/regression-test/data/correctness/test_cast_as_decimalv3.out 
b/regression-test/data/correctness/test_cast_as_decimalv3.out
index 9032acc1ee..db702dc9e4 100644
--- a/regression-test/data/correctness/test_cast_as_decimalv3.out
+++ b/regression-test/data/correctness/test_cast_as_decimalv3.out
@@ -12,3 +12,15 @@
 0.25000
 0.20000
 
+-- !select4 --
+-280.0000
+
+-- !select5 --
+-280.0001
+
+-- !select6 --
+-280.0000
+
+-- !select7 --
+-280.0001
+
diff --git a/regression-test/suites/correctness/test_cast_as_decimalv3.groovy 
b/regression-test/suites/correctness/test_cast_as_decimalv3.groovy
index b7e4998a23..a0ddbc9010 100644
--- a/regression-test/suites/correctness/test_cast_as_decimalv3.groovy
+++ b/regression-test/suites/correctness/test_cast_as_decimalv3.groovy
@@ -30,7 +30,7 @@ suite("test_cast_as_decimalv3") {
         );
     """
     sql """
-        set enable_nereids_planner=false,enable_fold_constant_by_be = false
+        set enable_nereids_planner=true,enable_fold_constant_by_be = false
     """
     sql """
         INSERT INTO divtest VALUES(1,3.00)
@@ -50,4 +50,22 @@ suite("test_cast_as_decimalv3") {
     qt_select3 """
         select 1.0 / val from divtest order by id
     """
+    qt_select4 """
+        select cast(-280.00000000 as decimal(16,4));
+    """
+    qt_select5 """
+        select cast(-280.00005000 as decimal(16,4));
+    """
+
+    sql """
+        set enable_nereids_planner=false
+    """
+
+
+    qt_select6 """
+        select cast(-280.00000000 as decimal(16,4));
+    """
+    qt_select7 """
+        select cast(-280.00005000 as decimal(16,4));
+    """
 }
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to