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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]