4

我正在尝试创建我的一个网站的法语版本。我已setlocale(LC_ALL, 'fr_FR');在页面顶部设置,并使用strftime我以法式风格正确显示日期。

但是我遇到了一些问题。该页面的一部分使用了我从 Web 服务获取的数据。我将返回值分配给这样的 var:

$overallRating = $returnArray['Overall'];

然后我稍后使用以下代码将其格式化为小数点后 1 位

number_format($overallRating,1)

在英文版本中,overallRating 值可能是7.5并返回一个值,例如7.5(通过 number_format 运行它的原因是如果它返回7我希望它显示7.0

但是在法语版本中,如果我打印出我得到的原始 $overallRating 值7,5,看起来它已经将其翻译成法语。这很好,但如果我运行它,number_format我会收到错误:

Notice: A non well formed numeric value encountered in /sites/index.php  on line 250

250行是number_format

我认为翻译7,5是搞砸了,但不知道如何解决这个问题......

使用 PHP 5.3 以防有任何新的东西可以帮助我

4

3 回答 3

8

所以经过大量的研究最终找到了答案。

PHP 仅适用于标准的美国十进制分隔符,无法处理法语 , 分隔符。

答案虽然不完美,但将数值重置为使用美国,同时允许日期等以法语格式化。放置此行:

 setlocale(LC_NUMERIC, 'C');

在下面

 setlocale(LC_ALL, 'fr_FR'); 

成功了

于 2010-05-26T10:39:15.043 回答
1

这就是你要问的吗?

<?php
    $overallRating = number_format($number, 1, '.', '');
?>

后期编辑:

<?php
setlocale(LC_ALL, 'fr_FR');
$number = '7';
echo $overallRating = number_format($number, 1, '.', '');
?>
于 2010-05-25T16:19:12.980 回答
1

我想获取一个像“54,33”这样的法语编辑字符串并将其作为 en_US 数字保存回数据库,因为正如已经指出的那样,PHP 真的只喜欢 en_US 格式的数字。我没有看到任何内置的 PHP 转换函数,所以构建了它来完成这项工作。删除千位分隔符并将小数分隔符替换为“。” 它旨在与任何设置一起使用。

//Currency Conversion Back to US for DB Storage or PHP number formatting
function number_convert_us($num) {
    $locale_settings = localeconv();
    $num = str_replace($locale_settings['mon_thousands_sep'], "", trim($num));
    $num = str_replace($locale_settings['mon_decimal_point'], ".", $num);
    return number_format((double)$num, 2, '.', '');
}

我将为 JavaScript 构建一个类似的东西。找到这个库进行展示: http: //software.dzhuvinov.com/jsworld-currency-formatting.html

于 2012-06-21T13:50:52.657 回答