ID: 24591
Updated by: [EMAIL PROTECTED]
Reported By: arnarb at oddi dot is
-Status: Open
+Status: Verified
Bug Type: Scripting Engine problem
Operating System: Linux 2.4.18
-PHP Version: 4.3.3RC1
+PHP Version: 5.0.0b2-dev, 4.3.3RC2-dev
New Comment:
<?php
printf("%.3f\n", 3.233);
var_dump(sprintf("%.3f", 3.233) + 1);
setlocale(LC_ALL, "is_IS");
printf("%.3f\n", 3.233);
var_dump(sprintf("%.3f", 3.233) + 1);
?>
Output:
3.233
float(4.233)
3,233
int(4)
Previous Comments:
------------------------------------------------------------------------
[2003-07-10 10:58:33] arnarb at oddi dot is
Tried upgrading to 4.3.3RC1, still the same. Therefore bumping the
version tag on this report.
------------------------------------------------------------------------
[2003-07-10 10:52:19] arnarb at oddi dot is
Description:
------------
When strings containing numbers in the locale format, and the locale
uses , as the decimal seperator, converting the string to a float cuts
off at the , and returns the integer part.
This was addressed in bugs #17105, #17815 and others. Those reports
were closed and the problem was claimed to be fixed in CVS as of
November 2002 by iliaa and sniper.
This bug is however still present in 4.3.2, as the reproduce code
demonstrates.
A quick look indicated that libc's strtod was being used for the
conversion, I verified that it is working on my platform.
Reproduce code:
---------------
<?php
printf("%.3f\n", 3.233);
print sprintf("%.3f", 3.233)+1;
print "\n";
setlocale(LC_ALL, "is_IS");
printf("%.3f\n", 3.233);
print sprintf("%.3f", 3.233)+1;
print "\n";
?>
Expected result:
----------------
3.233
4.233
3,233
4,233
Actual result:
--------------
3.233
4.233
3,233
4
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=24591&edit=1