I am trying to create a French version of one of my sites. I have set setlocale(LC_ALL, 'fr_FR');
at the top of my page, and using strftime
I am displaying dates correctly in the French style.
However I am having some problems with a number. Part of the page uses data I am getting from a Web Service. I am assigning a returned value to a var like this:
$overallRating = $returnArray['Overall'];
I am then using the following code later to format it to 1 decimal place
number_format($overallRating,1)
In the English version the overallRating value might be 7.5
and returns a value such as 7.5
(the reason for running it through the number_format is if it returns 7
I want it to display 7.0
)
However in the French version if I print out the raw $overallRating value I get 7,5
which looks like it has translated it into french. This would be fine but if I run it through number_format
I get the error:
Notice: A non well formed numeric value encountered in /sites/index.php on line 250
Line 250 is the number_format
line
I presume the translation to 7,5
is messing it up, but not sure how to solve this...
Using PHP 5.3 in case there is anything new that helps me
is this what you are asking ?
Later Edit:
So eventually found the answer after a lot of research.
PHP only really works with standard US decimal seperators and can't cope with the french , seperator.
The answer, although not perfect is to reset numeric values to use US while allowing dates etc to be formatted in French. Placing this line:
Under
has done the trick
I wanted to take a French-edited string like "54,33" and save it back to the db as en_US number because, as has been pointed out, PHP really only likes numbers in the en_US format. I didn't see any built-in PHP conversion functions so built this to do the job. Removes the thousands separator and replaces the decimal separator with "." and it's designed to work with any setup.
I'll build a similar thing for JavaScript. Found this library for display: http://software.dzhuvinov.com/jsworld-currency-formatting.html