Bug #17079 Updated: setlocale changes the internal representation of floats
| From: | jonathan at tricolon dot com | Date: | Wed, 08 May 2002 08:14:05 +0000 |
| Subject: | Bug #17079 Updated: setlocale changes the internal representation of floats | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-7200@lists.php.net to get a copy of this message | ||
ID: 17079
Updated by: jonathan@tricolon.com
Reported By: jonathan@tricolon.com
Status: Critical
Bug Type: Feature/Change Request
Operating System: Red Hat Linux 7.1
PHP Version: 4.1.2
New Comment:
Hi somehow it has to do with converting 'numberic'-strings to floats as
the script below shows:
<?
$rate1 = 1.123;
$amount1 = 5;
$rate2 = "1.123";
$amount2 = "5";
// set locale to English to handle the floatingpoints correctly
// first calculation with floats
setlocale (LC_ALL, 'en_US');
echo "This should be correct:<br><br>";
echo $rate1." * ".$amount1." = ".($rate1*$amount1);
// second calculation with floats converted from strings
echo "<br><br>This should be correct as well:<br><br>";
echo $rate2." * ".$amount2." = ".($rate2*$amount2);
// set locale to Dutch to show misbehaviour
// first calculation with floats
setlocale (LC_ALL, 'nl_NL');
echo "<br><br>This should still be correct:<br><br>";
echo $rate1." * ".$amount1." = ".($rate1*$amount1);
// second calculation with floats converted from strings
echo "<br><br>This should be wrong:<br><br>";
echo $rate2." * ".$amount2." = ".($rate2*$amount2);
?>
Hope this shows the 'bug' correctly!
Previous Comments:
------------------------------------------------------------------------
[2002-05-07 14:36:57] mfischer@php.net
This is dangerous indeed. We've had already reports about this (forgot
#, or did it even only came up on php-dev@?).
Though It may sound trivial, please provide a short self-contained
script showing the (mis-)behaviour.
Marking as critical for now.
------------------------------------------------------------------------
[2002-05-07 14:02:11] jonathan@tricolon.com
If I set my locale to Dutch in my php-script that converts currencies
for a Dutch site, I noticed that also the internal representation of
floats change as well. In Europe an amount of tenthousand dollars is
written as follows: $10.000,00 unlike the USA $10,000.00
So if I set the locale to "nl_NL" the internal representation of a
float with a point to seperate the integer part from the decimals (for
example: $amount = 68.123) is changed to a representation of a comma
','. I would like to see it changed because it messes up calculations
and the different locale settings should (IMHO) apply only to output
function and such.
Thanks,
Jonathan
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=17079&edit=1