- Fixed bug #37720 (merge_php_config scrambles values). (Mike,
pumuckel at metropolis dot de)
- Fixed bug #37569 (WDDX incorrectly encodes high-ascii characters). (Ilia)
+- Fixed bug #29538 (number_format and problem with 0). (Matthew Wilmas)
21 May 2006, Version 4.4.3RC1
- Added control character checks for cURL extension's open_basedir/safe_mode
is_negative = 1;
d = -d;
}
- if (!dec_point && dec > 0) {
- d *= pow(10, dec);
- dec = 0;
- } else {
- dec = MAX(0, dec);
- }
+ dec = MAX(0, dec);
PHP_ROUND_WITH_FUZZ(d, dec);
tmplen = spprintf(&tmpbuf, 0, "%.*f", dec, d);
return tmpbuf;
}
+ /* find decimal point, if expected */
+ dp = dec ? strchr(tmpbuf, '.') : NULL;
+
/* calculate the length of the return buffer */
- dp = strchr(tmpbuf, '.');
if (dp) {
integral = dp - tmpbuf;
} else {
reslen = integral;
if (dec) {
- reslen += 1 + dec;
+ reslen += dec;
+
+ if (dec_point) {
+ reslen++;
+ }
}
/* add a byte for minus sign */
* Take care, as the sprintf implementation may return less places than
* we requested due to internal buffer limitations */
if (dec) {
- int declen = dp ? strlen(dp+1) : 0;
- int topad = declen > 0 ? dec - declen : 0;
+ int declen = dp ? s - dp : 0;
+ int topad = dec > declen ? dec - declen : 0;
/* pad with '0's */
-
while (topad--) {
*t-- = '0';
}
if (dp) {
- /* now copy the chars after the point */
- memcpy(t - declen + 1, dp + 1, declen);
-
+ s -= declen + 1; /* +1 to skip the point */
t -= declen;
- s -= declen;
+
+ /* now copy the chars after the point */
+ memcpy(t + 1, dp + 1, declen);
}
/* add decimal point */
- *t-- = dec_point;
- s--;
+ if (dec_point) {
+ *t-- = dec_point;
+ }
}
- /* copy the numbers before the decimal place, adding thousand
+ /* copy the numbers before the decimal point, adding thousand
* separator every three digits */
while(s >= tmpbuf) {
*t-- = *s--;
--- /dev/null
+--TEST--
+Bug #29538 (number_format and problem with 0)
+--FILE--
+<?php
+ echo number_format(0.25, 2, '', ''), "\n";
+ echo number_format(1234, 2, '', ',');
+?>
+--EXPECT--
+025
+1,23400