diff --git a/include/decimal.h b/include/decimal.h index 5b5b8c0b460..fddae1f54a6 100644 --- a/include/decimal.h +++ b/include/decimal.h @@ -51,13 +51,7 @@ int decimal_mul(decimal *from1, decimal *from2, decimal *to); int decimal_div(decimal *from1, decimal *from2, decimal *to, int scale_incr); int decimal_mod(decimal *from1, decimal *from2, decimal *to); int decimal_round(decimal *from, decimal *to, int new_scale, decimal_round_mode mode); - -/* - the following works only on special "zero" decimal, not on any - decimal that happen to evaluate to zero -*/ - -#define decimal_is_zero(dec) ((dec)->intg1==1 && (dec)->frac1==0 && (dec)->buf[0]==0) +int decimal_is_zero(decimal *from); /* set a decimal to zero */ diff --git a/strings/decimal.c b/strings/decimal.c index 6b2982d8d8f..2dcc2c88ceb 100644 --- a/strings/decimal.c +++ b/strings/decimal.c @@ -1240,6 +1240,16 @@ int decimal_cmp(decimal *from1, decimal *from2) return from1->sign > from2->sign ? -1 : 1; } +int decimal_is_zero(decimal *from) +{ + dec1 *buf1=from->buf, + *end=buf1+ROUND_UP(from->intg)+ROUND_UP(from->frac); + while (buf1 < end) + if (*buf1++) + return 0; + return 1; +} + /* multiply two decimals