ID:               24591
 Updated by:       [EMAIL PROTECTED]
 Reported By:      arnarb at oddi dot is
-Status:           Verified
+Status:           Bogus
 Bug Type:         Scripting Engine problem
 Operating System: Linux 2.4.18
 PHP Version:      5.0.0b2-dev, 4.3.3RC2-dev
 New Comment:

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

This is expected behaviour, consider what you are doing. You generate a
sting containing "3,233" and then add 1 to it. PHP can only handle
floats that use "." as a decimal point hence when the string is
converted to a number it stops at the "," and 'rounds' the number to 3.
Hence the result of 4 when 1 is added. To avoid this problem you
should've performed the addition before printing the output.


Previous Comments:
------------------------------------------------------------------------

[2003-07-10 11:26:58] [EMAIL PROTECTED]

<?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)



------------------------------------------------------------------------

[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

Reply via email to