Edit report at http://bugs.php.net/bug.php?id=53711&edit=1
ID: 53711 Updated by: [email protected] Reported by: luke at cywh dot com Summary: Casting float->string->float with locale -Status: Open +Status: Wont fix Type: Bug Package: Math related PHP Version: 5.2.17 Block user comment: N Private report: N New Comment: This may not be intuitive, or even particularly useful, but it is long standing (and intended) behaviour, per (among many others) bug #31963 and doc bug #38785. I don't see any way to change this without a massive backward compatibility break. Previous Comments: ------------------------------------------------------------------------ [2011-01-10 23:48:02] luke at cywh dot com Description: ------------ When LC_ALL or LC_NUMERIC is used with setlocale casting a float as a string converts the number to the formatted locale (1234.56 to 1.234,56 instead of 1,234.56 for Italian). But when casting from a string to a float locale is not used and decimal precision is lost. I understand this has been a problem for a long time (since PHP 4 up to 5.3 at least). The obvious "work around" for me is avoid LC_NUMERIC and LC_ALL completely. Personally I would rather casting to a string NOT convert using the locale (so have it stay "1234.56"). A data type should not be locale aware. It's like assuming that a decimal number is monetary. If a float needed to be displayed with locale number_format should be used (where the default separators fit the locale). If casting to a string must be locale aware, shouldn't casting a string to a float be locale aware as well? On top of that, could it understand the thousands separator and simply ignore it? Test script: --------------- setlocale(LC_NUMERIC, 'en_US'); print (float)(string)1234.56; print '<br />'; setlocale(LC_NUMERIC, 'it_IT'); print (string)(float)(string)1234.56; print '<br />'; print (string)(float)'1.234,56'; Expected result: ---------------- 1234.56 1234,56 1234,56 Actual result: -------------- 1234.56 1234 1,234 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=53711&edit=1
