]> granicus.if.org Git - php/commitdiff
Fix the number format fix when the number of decimal places is 0.
authorWez Furlong <wez@php.net>
Fri, 10 Jan 2003 13:32:24 +0000 (13:32 +0000)
committerWez Furlong <wez@php.net>
Fri, 10 Jan 2003 13:32:24 +0000 (13:32 +0000)
# Thanks to Edin for his telepathy!

ext/standard/math.c

index e6bf03c2c2fc6819a4c5961fced6c51d81a36f50..62bf1a4b93723972a17f9a6a00dd417e7b9e8da5 100644 (file)
@@ -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;
 }