summaryrefslogtreecommitdiff
path: root/strings
diff options
context:
space:
mode:
authormhansson/martin@linux-st28.site <>2008-01-17 18:36:04 +0100
committermhansson/martin@linux-st28.site <>2008-01-17 18:36:04 +0100
commitf8fb6e930a2f7c976bcd7c37cb0c5a02af547fa3 (patch)
tree483bab7b13d39f093c5406eced75a24bad69cd84 /strings
parentdeacf8b37f9fce5dbc236f56362d4f7dd505e5df (diff)
parent2067dfe4742a209f903d71de02d4bb85ed54a65f (diff)
downloadmariadb-git-f8fb6e930a2f7c976bcd7c37cb0c5a02af547fa3.tar.gz
Merge mhansson@bk-internal:/home/bk/mysql-5.1-opt
into linux-st28.site:/home/martin/mysql/src/bug33143/my51-bug33143-pushee
Diffstat (limited to 'strings')
-rw-r--r--strings/decimal.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/strings/decimal.c b/strings/decimal.c
index f457014b2b1..0559dd97613 100644
--- a/strings/decimal.c
+++ b/strings/decimal.c
@@ -1601,9 +1601,21 @@ decimal_round(decimal_t *from, decimal_t *to, int scale,
x+=10;
*buf1=powers10[pos]*(x-y);
}
- if (frac0 < 0)
+ /*
+ In case we're rounding e.g. 1.5e9 to 2.0e9, the decimal_digit_t's inside
+ the buffer are as follows.
+
+ Before <1, 5e8>
+ After <2, 5e8>
+
+ Hence we need to set the 2nd field to 0.
+ The same holds if we round 1.5e-9 to 2e-9.
+ */
+ if (frac0 < frac1)
{
- dec1 *end=to->buf+intg0, *buf=buf1+1;
+ dec1 *buf= to->buf + ((scale == 0 && intg0 == 0) ? 1 : intg0 + frac0);
+ dec1 *end= to->buf + len;
+
while (buf < end)
*buf++=0;
}