[fix](decimal) fix cast rounding half up with negative number (#22450)

This commit is contained in:
Mryange
2023-08-01 21:47:42 +08:00
committed by GitHub
parent b8399148ef
commit bf50f9fa7f
3 changed files with 36 additions and 2 deletions

View File

@ -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;
}
}
}

View File

@ -12,3 +12,15 @@
0.25000
0.20000
-- !select4 --
-280.0000
-- !select5 --
-280.0001
-- !select6 --
-280.0000
-- !select7 --
-280.0001

View File

@ -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));
"""
}