ID:               45221
 User updated by:  walterquez at yahoo dot com
 Reported By:      walterquez at yahoo dot com
 Status:           Bogus
 Bug Type:         Strings related
 Operating System: Windows 2003
 PHP Version:      5.2.6
 New Comment:

This is not specific to a float, but also an integer.

Floats, or any numeric type should use commas, otherwise what is the
purpose in using the thousands_sep parameter in localeconv if it is not
used?

In a HTML form, if someone enters 1,000 (which is normal) rather than
1000, PHP will treat it as a 1, because of the comma. This is because
HTML forms passes fields as strings, not numbers.

For example, an HTML form that calculates a dollar value over a period
of time. ex: $value = $dollar_value * $duration;

If someone enters 1,000 in the dollar_value field, and 5 in the
duration field, the calculated value should be 5000, but instead it
calculates to 5. This is wrong.


<form method="post">
<input type="text" name="dollar_value" value="<?=
@$_POST['dollar_value'] ?>" /><br />
<input type="text" name="duration" value="<?= @$_POST['duration'] ?>"
/><br />
<input type="submit" />
</form>

<?php
$value = $_POST['dollar_value'] * $_POST['duration'];
echo $value;
?>


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

[2008-06-10 13:11:35] [EMAIL PROTECTED]

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

That is expected, the float value doesn't uses comma.
http://docs.php.net/float

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

[2008-06-09 18:15:34] walterquez at yahoo dot com

Description:
------------
When numbers in a string containing comma separators are converted to
any numeric type, it strips any number to the right of the commas.

Reproduce code:
---------------
<?php
$a = '200';
$b = '1,000';

if ($a > $b) echo 'A is bigger'; else echo 'B is bigger';
?>

For some reason, because $b has a comma, it converts $b to 1, not 1000.
If you remove the comma, it works fine.

To prove it, check the following.

$b = (int) $b; // same with (float), (double) or (real)
echo $b; // it prints 1, not 1000.

I even included, setlocale(LC_ALL, 'en'); but no luck.

Expected result:
----------------
B is bigger

Actual result:
--------------
A is bigger


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


-- 
Edit this bug report at http://bugs.php.net/?id=45221&edit=1

Reply via email to