#48315 [Opn->Bgs]: Type conversion into a float respects the numeric settings of the locale

From: Date: Mon, 18 May 2009 18:29:38 +0000
Subject: #48315 [Opn->Bgs]: Type conversion into a float respects the numeric settings of the locale
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-137452@lists.php.net to get a copy of this message
ID: 48315 Updated by: jani@php.net Reported By: alef0 at freenet dot de -Status: Open +Status: Bogus Bug Type: Math related Operating System: gentoo PHP Version: 5.2CVS-2009-05-18 (CVS) 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 Previous Comments: ------------------------------------------------------------------------ [2009-05-18 18:25:31] carsten_sttgt at gmx dot de > $var = '122.34343The'; //expected float: 122.34343 > $float_value_of_var = floatval($var); > > Conversion using floatval() or (float) respects the > numeric settings of the locale. No, just make a: | var_dump($float_value_of_var); > print ' or floatval(' . $var . ') = ' . $float_value_of_var ."\n\n"; You are casting a float to a string, and that's where locale comes in place. See [1]. And is this not the reason for setlocale: to output dates/currencies/numbers/... according to a language setting? If you want output the float value locale aware in a string, you can use printf() with the "%F" modifier. Regards, Carsten [1] http://de.php.net/manual/en/language.types.string.php#language.types.string.casting ------------------------------------------------------------------------ [2009-05-18 15:41:31] alef0 at freenet dot de At [27 Feb 2007 12:27pm UTC] tony2001@php.net wrote: ( ... ) we DON'T want scripts to depend on locale or we may end up with scripts working/not working with particular locales. (See Bug #40653) ------------------------------------------------------------------------ [2009-05-18 15:26:02] alef0 at freenet dot de Description: ------------ PHP version: 5.2.6RC4-pl0-gentoo Conversion using floatval() or (float) respects the numeric settings of the locale. THIS IS VERY DANGEROUS CAUSE YOU WILL GET WRONG RESULTS BY APPLYING ANY MATH METHODE ON CONVERTED FLOATS! Reproduce code: --------------- $var = '122.34343The'; //expected float: 122.34343 setlocale(LC_NUMERIC, 'en_US.utf8'); $float_value_of_var = (float) $var; print 'Locale dec sep point: (float) ' . $var . ' = ' . $float_value_of_var; $float_value_of_var = floatval($var); print ' or floatval(' . $var . ') = ' . $float_value_of_var . "<br /><br />\n\n"; setlocale(LC_NUMERIC, 'de_DE.utf8'); $float_value_of_var = (float) $var; print 'Locale dec sep comma: (float) ' . $var . ' = ' . $float_value_of_var; $float_value_of_var = floatval($var); print ' or floatval(' . $var . ') = ' . $float_value_of_var . "<br /><br />\n\n"; Expected result: ---------------- Locale dec sep point: (float) 122.34343The = 122.34343 or floatval(122.34343The) = 122.34343 Locale dec sep comma: (float) 122.34343The = 122.34343 or floatval(122.34343The) = 122.34343 Actual result: -------------- Locale dec sep point: (float) 122.34343The = 122.34343 or floatval(122.34343The) = 122.34343 Locale dec sep comma: (float) 122.34343The = 122,34343 or floatval(122.34343The) = 122,34343 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=48315&edit=1

« previous php.bugs (#137452) next »