ID: 41246 User updated by: phil at goli dot at Reported By: phil at goli dot at Status: Bogus Bug Type: ICONV related Operating System: Linux Gentoo PHP Version: 5.2.1 New Comment:
i see your point but in my opinion string conversion to numbers is not 100% correct. http://de2.php.net/manual/en/language.types.string.php#language.types.string.conversion >String conversion to numbers >When a string is evaluated as a numeric value, the resulting value and >type are determined as follows. >The string will evaluate as a float if it contains any of the >characters '.', 'e', or 'E'. Otherwise, it will evaluate as an integer. the PHP internal automatic type cast from a string to a float should not look for the character '.' in a string but should look for the decimal point character that is defined in the script's locale. that would be consistent. right? Previous Comments: ------------------------------------------------------------------------ [2007-05-01 14:48:02] [EMAIL PROTECTED] Did you actually read my command lines? It shows that PHP automatically converts floats to the locale's display format when they're converted to strings. It has nothing to to with utf8_convert() and is expected bahaviour. <quote url="http://de2.php.net/manual/en/language.types.string.php#language.types.string.casting"> An integer or a floating point number (float) is converted to a string representing the number with its digits (including the exponent part for floating point numbers). Note: The decimal point character is defined in the script's locale (category LC_NUMERIC). See setlocale(). </quote> ------------------------------------------------------------------------ [2007-05-01 14:20:41] phil at goli dot at sorry for bothering but i'm quite sure there's something wrong. do you have locales installed on your machine? your code php -r 'setlocale(LC_ALL,"de_DE"); echo 10.01,"\n";' doesn't use utf8_encode which causes the problem together (and ONLY if locale de_DE is really installed on your system) with setlocale(LC_ALL,"de_DE"). so it doesn't prove that this is not a bug. please try these two lines: $loc_de = setlocale(LC_ALL,"de_DE"); echo 'Example only works if locale de_DE is installed! Current locale: "' . $loc_de . '". Output: ' . (utf8_encode(0.01) + 0.01) . "<br>"; Summary: a string that comes out of utf8_encode is not automatically type casted to float when adding another float to it (this would normally happen if you don't us utf8_encode). but this whole scenario is only the case if setlocale(LC_ALL,"de_DE") is used! ------------------------------------------------------------------------ [2007-05-01 13:19:20] [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 [EMAIL PROTECTED]:~$ php -r 'echo 10.01,"\n";' 10.01 [EMAIL PROTECTED]:~$ php -r 'setlocale(LC_ALL,"de_DE"); echo 10.01,"\n";' 10,01 ------------------------------------------------------------------------ [2007-05-01 00:00:37] phil at goli dot at Description: ------------ Applies to PHP versions 4.4.1, 4.4.4, 5.2.1, etc. 1. setlocales to german: setlocale(LC_ALL, '[EMAIL PROTECTED]', 'de_DE', 'deu_deu'); 2. assign a float to a variable by defining a string: $myTest = '10.01'; 3. add a float to that string: $myTest = $myTest + 0.01; 4. convert that float to utf8: $myTest = utf8_encode($myTest); 5. add another float to that utf8 string: $myTest = $myTest + 0.01; 6. if the german locales are installed on the system then the output will be wrong. utf8_encode chops off the positions after decimal point. Reproduce code: --------------- $loc_de = setlocale(LC_ALL, '[EMAIL PROTECTED]', 'de_DE', 'deu_deu'); echo '<html><body><form><textarea cols="40" rows="40">'; echo 'Preferred locale for german on this system is "' . $loc_de . '"' . "\n"; echo 'Example only works if locales for german are installed!' . "\n\n"; echo 'Normal:' . "\n"; $myTest = '10.01'; var_dump($myTest); $myTest = $myTest + 0.01; var_dump($myTest); // no utf8_encode $myTest = $myTest + 0.01; echo 'Result should be 10.03 and it is: '; var_dump($myTest); echo "\n\n" . 'With utf8_encode:' . "\n"; $myTest = '10.01'; var_dump($myTest); $myTest = $myTest + 0.01; var_dump($myTest); $myTest = utf8_encode($myTest); var_dump($myTest); $myTest = $myTest + 0.01; echo 'Result should be 10.03 BUT it is: '; var_dump($myTest); echo '</textarea></form></body></html>'; exit; Expected result: ---------------- Preferred locale for german on this system is "[EMAIL PROTECTED]" Example only works if locales for german are installed! Normal: string(5) "10.01" float(10,02) Result should be 10.03 and it is: float(10,03) With utf8_encode: string(5) "10.01" float(10,02) string(5) "10,02" Result should be 10.03 ... and it is: float(10,03) Actual result: -------------- Preferred locale for german on this system is "[EMAIL PROTECTED]" Example only works if locales for german are installed! Normal: string(5) "10.01" float(10,02) Result should be 10.03 and it is: float(10,03) With utf8_encode: string(5) "10.01" float(10,02) string(5) "10,02" Result should be 10.03 ... and it is: float(10,01) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=41246&edit=1
