From: Wez Furlong Date: Fri, 10 Jan 2003 13:32:24 +0000 (+0000) Subject: Fix the number format fix when the number of decimal places is 0. X-Git-Tag: PHP_5_0_dev_before_13561_fix~335 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cf9f784ecd8c6a4a2c4d5fb2fa519d91569480c6;p=php Fix the number format fix when the number of decimal places is 0. # Thanks to Edin for his telepathy! --- diff --git a/ext/standard/math.c b/ext/standard/math.c index e6bf03c2c2..62bf1a4b93 100644 --- a/ext/standard/math.c +++ b/ext/standard/math.c @@ -1014,7 +1014,11 @@ PHPAPI char *_php_math_number_format(double d, int dec, char dec_point, char tho integral += integral / 3; } - reslen = integral + 1 + dec; + reslen = integral; + + if (dec) { + reslen += 1 + dec; + } /* add a byte for minus sign */ if (is_negative) { @@ -1034,21 +1038,24 @@ PHPAPI char *_php_math_number_format(double d, int dec, char dec_point, char tho int topad = declen > 0 ? dec - declen : 0; /* pad with '0's */ + while (topad--) { *t-- = '0'; } - - /* now copy the chars after the point */ - memcpy(t - declen + 1, dp + 1, declen); - t -= declen; - s -= declen; + if (dp) { + /* now copy the chars after the point */ + memcpy(t - declen + 1, dp + 1, declen); + + t -= declen; + s -= declen; + } /* add decimal point */ *t-- = dec_point; s--; } - + /* copy the numbers before the decimal place, adding thousand * separator every three digits */ while(s >= tmpbuf) { @@ -1064,7 +1071,7 @@ PHPAPI char *_php_math_number_format(double d, int dec, char dec_point, char tho } efree(tmpbuf); - + return resbuf; }