mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
Bug #27984 Long Decimal Maths produces truncated results.
decimal_round failed to perform a correct rounding of a decimal number if its first nine digits were '9'. It just sets those digits to 0.
This commit is contained in:
parent
bb089cea38
commit
84a572aabf
3 changed files with 10 additions and 1 deletions
|
@ -1465,4 +1465,7 @@ Error 1264 Out of range value adjusted for column 'cast(a as DECIMAL(3,2))' at r
|
|||
Error 1264 Out of range value adjusted for column 'cast(a as DECIMAL(3,2))' at row 1
|
||||
Error 1264 Out of range value adjusted for column 'cast(a as DECIMAL(3,2))' at row 1
|
||||
Error 1264 Out of range value adjusted for column 'cast(a as DECIMAL(3,2))' at row 1
|
||||
SELECT 1.000000000000 * 99.999999999998 / 100 a,1.000000000000 * (99.999999999998 / 100) b;
|
||||
a b
|
||||
0.9999999999999800000000000000 0.9999999999999800000000000000
|
||||
End of 5.0 tests
|
||||
|
|
|
@ -1149,4 +1149,9 @@ select cast(a as DECIMAL(3,2)), count(*)
|
|||
UNION select 12.1234
|
||||
) t group by 1;
|
||||
|
||||
#
|
||||
# Bug #27984 Long Decimal Maths produces truncated results
|
||||
#
|
||||
|
||||
SELECT 1.000000000000 * 99.999999999998 / 100 a,1.000000000000 * (99.999999999998 / 100) b;
|
||||
--echo End of 5.0 tests
|
||||
|
|
|
@ -1517,9 +1517,10 @@ decimal_round(decimal_t *from, decimal_t *to, int scale,
|
|||
dec1 *p0= buf0+intg0+max(frac1, frac0);
|
||||
dec1 *p1= buf1+intg1+max(frac1, frac0);
|
||||
|
||||
to->buf[0]= 0;
|
||||
while (buf0 < p0)
|
||||
*(--p1) = *(--p0);
|
||||
if (unlikely(intg1 > intg0))
|
||||
to->buf[0]= 0;
|
||||
|
||||
intg0= intg1;
|
||||
buf0=to->buf;
|
||||
|
|
Loading…
Reference in a new issue