php number_format not using locale


php number_format not using locale

这是我第一次使用setLocale,我通常讨厌使用它,因为我在共享主机上工作,但自从最近换了工作,我已经获得了服务器控制权,因此能够安装区域设置。

当我在应用程序上切换到fr_CA时,我调用

money_format('%n', $value)

它正确地格式化了货币,但奇怪的是,如果我

number_format($value, 2);

我得到一个用正确的小数(2)格式化的数字,但小数分隔符不是预期的。我得到的是"0.32",而不是区域设置所说的"0,32"。

我甚至检查了服务器上的区域设置,它清楚地显示小数分隔符是一个逗号:

LC_NUMERIC
decimal_point             "<U002C>"
thousands_sep             "<U0020>"
grouping                  3;3
END LC_NUMERIC

我在网上查了一下,U002C确实是逗号…不段…

你对此有何看法?

PS,这是我检查的:

  1. setLocale返回fr_CA
  2. setLocale清楚地正确格式化,我的代码没有覆盖调用number_format
  3. 中的符号

谢谢

另一种方法是使用localeconv()检索该信息并在number_format()中使用它,类似于:

$locale = localeconv(); 
echo number_format(
    $number, 
    $locale['frac_digits'], 
    $locale['decimal_point'], 
    $locale['thousands_sep']
);