PHP 4.0 Bug #10002 Updated: sprintf() and floating point
| From: | zeev@php.net | Date: | Tue, 27 Mar 2001 13:32:15 +0000 |
| Subject: | PHP 4.0 Bug #10002 Updated: sprintf() and floating point | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-50046@lists.php.net to get a copy of this message | ||
ID: 10002
Updated by: zeev
Reported By: bmr@comtime.com
Status: Open
Bug Type: Strings related
Assigned To:
Comments:
I can't reproduce it under RH 6.2. Generally the fix isn't supposed to do anything (since
arg is a double, 10 should be converted to a double automatically), but the fix can't hurt
anything so if it works around a compiler bug, it's fine.
PHP cannot use sprintf() because sprintf() works with C types with predefined types for the
arguments, whether PHP has its own types, and autoconverts arguments to match the format string.
Previous Comments:
---------------------------------------------------------------------------
[2001-03-26 17:19:30] derick@php.net
This bug is in 4.0.5RC2 too, just confirmed it
---------------------------------------------------------------------------
[2001-03-26 14:13:27] bmr@comtime.com
<?php
printf('%.2f',0.09999999999999999167332731531132594682276248931884765625);
?>
produces '0.0:' instead of '0.10'
I'm really curious as to why PHP just doesn't use libc's sprintf().
./configure --with-oracle=/usr/local/oracle/product/8.1.7
--with-oci8=/usr/local/oracle/product/8.1.7 --enable-force-cgi-redirect
--enable-track-vars --with-posix --enable-sockets --enable-sigchild
--with-gd=/usr/local
gcc version 2.95.2 19991024 (release)
This is not exactly a fix...
--- ext/standard/formatted_print.c Mon Mar 26 14:01:31 2001
+++ ext/standard/formatted_print.c-fixed Mon Mar 26 14:02:26 2001
@@ -92,7 +92,7 @@
while (p1 < &cvt_buf[NDIG])
*p++ = *p1++;
} else if (arg > 0) {
- while ((fj = arg * 10) < 1) {
+ while ((fj = arg * 10.0) < 0.9999999) {
arg = fj;
r2--;
}
---------------------------------------------------------------------------
ATTENTION! Do NOT reply to this email!
To reply, use the web interface found at http://bugs.php.net/?id=10002&edit=2