Bug #17079 Updated: setlocale changes the internal representation of floats

From: 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

« previous php.bugs (#7200) next »