[fix](decimal) fix cast rounding half up with negative number (#22450)
This commit is contained in:
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -12,3 +12,15 @@
|
||||
0.25000
|
||||
0.20000
|
||||
|
||||
-- !select4 --
|
||||
-280.0000
|
||||
|
||||
-- !select5 --
|
||||
-280.0001
|
||||
|
||||
-- !select6 --
|
||||
-280.0000
|
||||
|
||||
-- !select7 --
|
||||
-280.0001
|
||||
|
||||
|
||||
@ -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));
|
||||
"""
|
||||
}
|
||||
Reference in New Issue
Block a user