diff options
author | holyfoot/hf@mysql.com/hfmain.(none) <> | 2007-05-21 22:22:47 +0500 |
---|---|---|
committer | holyfoot/hf@mysql.com/hfmain.(none) <> | 2007-05-21 22:22:47 +0500 |
commit | 84a572aabf092a799a81e065d79caa88fdf46ef3 (patch) | |
tree | 97cd5e0068c8bfdcd0bbf524552be2778b2e1e63 /strings | |
parent | bb089cea3852546e37d6a241b35f9223759b88c1 (diff) | |
download | mariadb-git-84a572aabf092a799a81e065d79caa88fdf46ef3.tar.gz |
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.
Diffstat (limited to 'strings')
-rw-r--r-- | strings/decimal.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/strings/decimal.c b/strings/decimal.c index 1ae75167794..f1f02f3a071 100644 --- a/strings/decimal.c +++ b/strings/decimal.c @@ -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; |