From 08195a43f318581e373792fd30e00813ab3ad9fc Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 20 Jan 2000 02:21:44 +0000 Subject: [PATCH] Fix bugs in NUMERIC ceil() and floor() functions. ceil(0) returned 1, and both would insert random junk digits if given an input that was an exact multiple of 10. --- src/backend/utils/adt/numeric.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/backend/utils/adt/numeric.c b/src/backend/utils/adt/numeric.c index 20b2a001d7..e9443ddd9d 100644 --- a/src/backend/utils/adt/numeric.c +++ b/src/backend/utils/adt/numeric.c @@ -5,7 +5,7 @@ * * 1998 Jan Wieck * - * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.23 2000/01/18 03:44:41 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/numeric.c,v 1.24 2000/01/20 02:21:44 tgl Exp $ * * ---------- */ @@ -2932,7 +2932,7 @@ ceil_var(NumericVar *var, NumericVar *result) set_var_from_var(var, &tmp); tmp.rscale = 0; - tmp.ndigits = MAX(0, tmp.weight + 1); + tmp.ndigits = MIN(tmp.ndigits, MAX(0, tmp.weight + 1)); if (tmp.sign == NUMERIC_POS && cmp_var(var, &tmp) != 0) add_var(&tmp, &const_one, &tmp); @@ -2957,7 +2957,7 @@ floor_var(NumericVar *var, NumericVar *result) set_var_from_var(var, &tmp); tmp.rscale = 0; - tmp.ndigits = MAX(0, tmp.weight + 1); + tmp.ndigits = MIN(tmp.ndigits, MAX(0, tmp.weight + 1)); if (tmp.sign == NUMERIC_NEG && cmp_var(var, &tmp) != 0) sub_var(&tmp, &const_one, &tmp); -- 2.11.0