ID:               17079
 Comment by:       dMNz at one dot lt
 Reported By:      jonathan at tricolon dot com
 Status:           Bogus
 Bug Type:         Scripting Engine problem
 Operating System: Red Hat Linux 7.1
 PHP Version:      4.3.0 RC2
 Assigned To:      hholzgra
 New Comment:

am pabandymuj..


Previous Comments:
------------------------------------------------------------------------

[2003-03-24 10:18:13] [EMAIL PROTECTED]

Related discussion:
http://news.php.net/article.php?group=php.dev&article=95211


------------------------------------------------------------------------

[2003-01-02 13:58:52] php at zeguigui dot com

I switched to PHP 4.3 (in dev only) and I saw this change in locale
handling. It is not OS dependant as I have the problem with Windows
XP.

In PHP < 4.3.0 I have a MySQL database with floats. To handle those
floats I had to make some convertions (with str_replace) as results
were not locale dependant (I use fr_FR). For instance if I had 1.234
stored in db, $row = mysql mysql_fetch_row($handle) would return in
$row[0] the value "1.234" and $row[0] * 100 would return 100 whereas of
123,4 (if outputed).

In PHP = 4.3.0 I do not need those convertion routines anymore (it was
a workaround in my opinion).

So starting with PHP 4.3:
$a = 1.234 ==> OK whatever locale is
$b = "1.234" ==> OK whatever locale is
$c = "1,234" ==> NOT OK whatever locale is

If I have some user inputs I have to convert from locale representation
to number representation before processing them... it would be great to
have a function that do the job for us (didn't find one, sorry!)... but
maybe that's not the good place to ask for this!

------------------------------------------------------------------------

[2003-01-02 10:13:59] martin at mermaidconsulting dot com

I also ran across this problem and have been messing with it for like 3
days before i finally ran across this post. 

If you do not consider it a bug I would recommend you at least include
it in the documentation and make it very clear that you cannot perform
calculations using thousands-seperators based on the locale settings. 

If you have a look at the following sample you can see that user-inputs
will get totally messed up in case they use thousand-seperators.

<?
setlocale(LC_NUMERIC, "en_US") ; // setting the numeric locale to
us-conventions
setlocale(LC_MONETARY, "en_US") ; // setting the monetary locale to
us-conventions

$locale_info = localeconv();
  echo "mon_decimal_point: {$locale_info["mon_decimal_point"]}<br>";
//
displays the monetary decimal point used for the locale
  echo "mon_thousands_sep: {$locale_info["mon_thousands_sep"]}<br>";
//
displays the monetary thousands seperator used for the locale
  echo "decimal_point: {$locale_info["decimal_point"]}<br>"; //
displays the
decimal point used for the locale
  echo "thousands_sep: {$locale_info["thousands_sep"]}<br>"; //
displays the
thousands seperator used for the locale

// defines 2 variables that should be 1000000 and 750000
$a = "1,000,000";
$b = "750,000";

print "A = $a<br>";
print "B = $b<br>";

// performing a simple calculation that illustrates how PHP handles
the
numbers
print "A * 1 = " . ($a*1) . "<br>";
print "B * 1 = " . ($b*1) . "<br>";
?>

Imho there is no point in having locale settings for currencies and
numeric values if you cannot use it for doing calculations.

Thanks

/Martin

------------------------------------------------------------------------

[2002-12-16 19:45:14] [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

If you switch to a locale where the float separator is ',' then when it
comes to output the data back to the user the float decimal point will
be depedant on the specified locale. Internally however it'll always be
'.'.

------------------------------------------------------------------------

[2002-12-16 08:56:08] jonathan at tricolon dot com

> You should not use ',' to represent floats
> ALWAYS use '.' regardless of locale.

This is exactly the problem. When the locale is changed to Dutch the
internal representation of floats is changed. The separator used is
changed to ','. This behaviour is incorrect and should be fixed. Check
my initial and second post for a detailed description.

Thanks,
Jonathan

------------------------------------------------------------------------

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/17079

-- 
Edit this bug report at http://bugs.php.net/?id=17079&edit=1

Reply via email to