ID: 39873 Updated by: [EMAIL PROTECTED] Reported By: rob4you at vodafone dot it -Status: Open +Status: Closed Bug Type: Strings related Operating System: Windows XP PHP Version: 5.2.0 New Comment:
This bug has been fixed in CVS. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. Thank you for the report, and for helping us make PHP better. Previous Comments: ------------------------------------------------------------------------ [2006-12-19 16:30:08] rob4you at vodafone dot it > That does not mean it was supposed to work the way you > expect. > it should be clarified in the docs. Yes, if this is the way it works, it should be clarified in docs. > please try the NEXT snapshot, I'm unableto reproduce it. I've tried the last available snapshot. Here is the problem: Reproduce code: --------------- <?php $ita=array("ita","it","Italian","it_IT","it_IT.ISO8859-1","it_IT.ISO_8859-1"); setlocale(LC_ALL,$ita); $num=0+"1234.56"; $formatted_num=number_format($num,2); echo $formatted_num; ?> Expected result: ---------------- 1,234.56 Actual result: -------------- 1,234,,56.00 it sounds quite strange...:-) ------------------------------------------------------------------------ [2006-12-19 15:31:21] [EMAIL PROTECTED] >I don't think so. >If I see, in localeconv(): >I expect that the number formatted with: That does not mean it was supposed to work the way you expect. >But in this case the locale aware is not respected: it's > respected only for [decimal_point] and NOT for > [thousands_sep]. Right, that's how it is supposed to work and it should be clarified in the docs. >now it incorrectly produces: Again, please try the NEXT snapshot, I'm unableto reproduce it. ------------------------------------------------------------------------ [2006-12-19 15:21:42] rob4you at vodafone dot it > Yes, it was never supposed to work this way. > This is exactly the reason why wer have number_format() > function. I don't think so. If I see, in localeconv(): [decimal_point] => , [thousands_sep] => . I expect that the number formatted with: printf("%f",$num) is 1.234,56 and NOT 1234,56 As you can see the [decimal_point] is ",", according with localeconv(), but the [thousands_sep] doesn't appear here, disaccording with localeconv(). The manual states about the %f: "f - the argument is treated as a float, and presented as a floating-point number (locale aware)." But in this case the locale aware is not respected: it's respected only for [decimal_point] and NOT for [thousands_sep]. >> On the contrary, it's going worse: > I can't reproduce this. > Please try the next snapshot. For: printf("%f",$num) before it produced (with loca setted on "it"): "1234,56" now it incorrectly produces: "1234.56" that is it forgets both the [thousands_sep] AND the [decimal_point]. ------------------------------------------------------------------------ [2006-12-19 15:07:36] [EMAIL PROTECTED] >But the problem isn't resolved. Yes, it was never supposed to work this way. This is exactly the reason why wer have number_format() function. >On the contrary, it's going worse: I can't reproduce this. Please try the next snapshot. ------------------------------------------------------------------------ [2006-12-18 19:43:24] rob4you at vodafone dot it I've tried the link for Windows you suggested: http://snaps.php.net/win32/php5.2-win32-latest.zip. Now i've this version of php: "PHP Version 5.2.1RC2-dev". But the problem isn't resolved. On the contrary, it's going worse: now it's ignored also the decimal separator [decimal_point] with %f. The problem persists also with other os. With the same script of the previous message, here it is the output produced: Actual result: -------------- Italian_Italy.1252 1234,56 Not dependant in local settings: 1234.56000 Dependant on local settings: 1234.560000 Array ( [decimal_point] => , [thousands_sep] => . ...etc... ) The expected result is obviously the same as the previous message: Expected result: ---------------- Italian_Italy.1252 1.234,56 Not dependant in local settings: 1234.560000 Dependant on local settings: 1.234,560000 Array ( [decimal_point] => , [thousands_sep] => . ...etc... ) ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/39873 -- Edit this bug report at http://bugs.php.net/?id=39873&edit=1