Browse Source

Fixed bug #43053 (Regression: some numbers shown in scientific notation). (int-e at gmx dot de)

some 64bit test files may need to be fixed
PHP-5.2.1RC1
Dmitry Stogov 18 years ago
parent
commit
11900b10a3
  1. 2
      NEWS
  2. 14
      Zend/tests/bug43053.phpt
  3. 2
      Zend/tests/hex_overflow_32bit.phpt
  4. 2
      Zend/tests/zend_strtod.phpt
  5. 9
      Zend/zend_strtod.c
  6. 2
      ext/standard/tests/general_functions/008.phpt
  7. 16
      ext/standard/tests/strings/printf.phpt
  8. 5
      main/snprintf.c

2
NEWS

@ -116,6 +116,8 @@ PHP NEWS
- Fixed bug #43666 (Fixed code to use ODBC 3.52 datatypes for 64bit systems). - Fixed bug #43666 (Fixed code to use ODBC 3.52 datatypes for 64bit systems).
(Patrick) (Patrick)
- Fixed bug #43540 (rfc1867 handler newlength problem). (Arnaud) - Fixed bug #43540 (rfc1867 handler newlength problem). (Arnaud)
- Fixed bug #43053 (Regression: some numbers shown in scientific notation).
(int-e at gmx dot de)
- Fixed bug #42737 (preg_split('//u') triggers a E_NOTICE with newlines). - Fixed bug #42737 (preg_split('//u') triggers a E_NOTICE with newlines).
(Nuno) (Nuno)
- Fixed bug #42604 ("make test" fails with --with-config-file-scan-dir=path). - Fixed bug #42604 ("make test" fails with --with-config-file-scan-dir=path).

14
Zend/tests/bug43053.phpt

@ -0,0 +1,14 @@
--TEST--
Bug #43053 (Regression: some numbers shown in scientific notation)
--FILE--
<?php
echo 1200000.00."\n";
echo 1300000.00."\n";
echo 1400000.00."\n";
echo 1500000.00."\n";
?>
--EXPECT--
1200000
1300000
1400000
1500000

2
Zend/tests/hex_overflow_32bit.phpt

@ -22,7 +22,7 @@ foreach ($doubles as $d) {
echo "Done\n"; echo "Done\n";
?> ?>
--EXPECTF-- --EXPECTF--
float(4083360297110%d)
float(4.0833602971%dE+14)
float(4.7223664828%dE+21) float(4.7223664828%dE+21)
float(1.3521606402%dE+31) float(1.3521606402%dE+31)
float(1.9807040628%dE+27) float(1.9807040628%dE+27)

2
Zend/tests/zend_strtod.phpt

@ -15,5 +15,5 @@ echo "Done\n";
float(-100) float(-100)
float(808792757210) float(808792757210)
float(-4.5646456464565E+27) float(-4.5646456464565E+27)
float(-11276204760067000)
float(-1.1276204760067E+16)
Done Done

9
Zend/zend_strtod.c

@ -1720,14 +1720,7 @@ ZEND_API char * zend_dtoa(double _d, int mode, int ndigits, int *decpt, int *sig
if (value(d) > 0.5 + value(eps)) if (value(d) > 0.5 + value(eps))
goto bump_up; goto bump_up;
else if (value(d) < 0.5 - value(eps)) { else if (value(d) < 0.5 - value(eps)) {
/* cut ALL traling zeros only if the number of chars is greater than precision
* otherwise cut only extra zeros
*/
if (k < ndigits) {
while(*--s == '0' && (s - s0) > k);
} else {
while(*--s == '0');
}
while(*--s == '0');
s++; s++;
goto ret1; goto ret1;
} }

2
ext/standard/tests/general_functions/008.phpt

@ -34,7 +34,7 @@ array(14) {
[11]=> [11]=>
float(123456789012) float(123456789012)
[12]=> [12]=>
float(1234567890120)
float(1.23456789012E+12)
[13]=> [13]=>
float(1.23456789012E+19) float(1.23456789012E+19)
} }

16
ext/standard/tests/strings/printf.phpt

@ -645,10 +645,10 @@ Array
-123456 -123456
123456 123456
-123456 -123456
120000
-120000
+120000
-120000
1.2e+5
-1.2e+5
+1.2e+5
-1.2e+5
123456 123456
-123456 -123456
1.0E+5 1.0E+5
@ -657,10 +657,10 @@ Array
-123456 -123456
123456 123456
-123456 -123456
120000
-120000
+120000
-120000
1.2E+5
-1.2E+5
+1.2E+5
-1.2E+5
*** Output for '%%%.2f' as the format parameter *** *** Output for '%%%.2f' as the format parameter ***
%12345678900.00 %12345678900.00

5
main/snprintf.c

@ -155,10 +155,7 @@ PHPAPI char *php_gcvt(double value, int ndigit, char dec_point, char exponent, c
*dst++ = '-'; *dst++ = '-';
} }
for (i = 0; i < ndigit && digits[i] != '\0'; i++);
if ((decpt >= 0 && decpt - i > 4)
|| (decpt < 0 && decpt < -3)) { /* use E-style */
if ((decpt >= 0 && decpt > ndigit) || decpt < -3) { /* use E-style */
/* exponential format (e.g. 1.2345e+13) */ /* exponential format (e.g. 1.2345e+13) */
if (--decpt < 0) { if (--decpt < 0) {
sign = 1; sign = 1;

Loading…
Cancel
Save