我想在美元中显示一个货币金额,我正在寻找一个函数,并在PHP手册中找到了这样的功能-在这里输入链接描述。拉斐尔·m·萨尔维奥尼提交的。事实证明,它不适用于一些较旧的操作系统,因此应该使用setlocale()函数来防止错误。所以我有下面的代码:
setlocale(LC_MONETARY, 'en_US.UTF-8');
它在Windows 8.1
上工作得很好,但现在我正在使用Windows 10
,似乎这现在不起作用。我尝试了下面的代码,看看setlocale函数将返回什么:
<?php
setlocale(LC_ALL,"US");
$locale_info = localeconv();
print_r($locale_info);
?>
我得到的是:
Array ([decimal_point] =>。[thousands_sep] => [int_curr_symbol] => [currency_symbol] => [mon_decimal_point] => [mon_thousands_sep] => [positive_sign] => [negative_sign] => [int_frac_digits] => 127 [p_cs_precedes] => 127 [n_sep_by_space] => 127 [p_sign_posn] => 127 [n_sign_posn] => 127 [grouping] => Array () [mon_grouping] => Array ())
当我在w3schools.com中运行相同的代码时,数据似乎非常不同:
Array ([decimal_point] =>。[thousands_sep] =>, [int_curr_symbol] => USD [currency_symbol] => $ [mon_decimal_point] =>。[mon_thousands_sep] =>, [positive_sign] => [negative_sign] => - [int_frac_digits] => 2 [frac_digits] => 2 [p_cs_precedes] => 1 [p_sep_by_space] => 0 [p_sign_posn] => 3 [n_sign_posn] => 0 [grouping] => Array ([0] => 3)
我已经手动设置了US的值:
$locale = array(
'decimal_point' => '.',
'thousands_sep' => ',',
'int_curr_symbol' => 'USD',
'currency_symbol' => '$',
'mon_decimal_point' => '.',
'mon_thousands_sep' => ',',
'positive_sign' => '',
'negative_sign' => '-',
'int_frac_digits' => 2,
'frac_digits' => 2,
'p_cs_precedes' => 1,
'p_sep_by_space' => 0,
'p_sign_posn' => 3,
'n_sign_posn' => 0,
'grouping' => array(),
'mon_grouping' => array(0 => 3, 1 => 3)
);
现在看来这是有效的,但是只要我需要美元,这个解决方案就会有效。
你知道为什么setlocale()函数在Windows 10中工作方式不一样,但在Windows 8.1中工作正常吗?我一直在使用相同的PHP版本两次
你的代码段给我的结果与你在Windows 10上得到的结果完全相同,我刚刚在CentOS (Linux)上测试了它。用var_dump检查setlocale的返回值告诉我它返回FALSE,根据PHP文档,它的意思是:
如果区域设置功能,返回FALSE未在您的平台上实现,则指定的区域设置没有存在或类别名称无效。
所以这导致我做以下改变,它给出了正确的结果,你之后:
setlocale(LC_ALL, 'en_US');