我已经读到 money_format 在 Windows 和某些 Linux 发行版(即 BSD 4.11 变体)上不可用。但是我想在可用时使用普通函数编写跨平台库,在不可用时使用此解决方法,因此我的库将能够在每个基于 PHP 的 Web 服务器上运行。
是否有任何简单的解决方案来检查内置功能是否可用,如果不包括上面的解决方案?
我已经读到 money_format 在 Windows 和某些 Linux 发行版(即 BSD 4.11 变体)上不可用。但是我想在可用时使用普通函数编写跨平台库,在不可用时使用此解决方法,因此我的库将能够在每个基于 PHP 的 Web 服务器上运行。
是否有任何简单的解决方案来检查内置功能是否可用,如果不包括上面的解决方案?
仅当系统具有 strfmon 功能时才定义函数 money_format()。例如,Windows 没有,因此 money_format() 在 Windows 中是未定义的。
所以你可以使用这个 php 代码:
setlocale(LC_ALL, ''); // Locale will be different on each system.
$amount = 1000000.97;
$locale = localeconv();
echo $locale['currency_symbol'], number_format($amount, 2, $locale['decimal_point'], $locale['thousands_sep']);
有了这个,您可以编写真正可移植的代码,而不是依赖操作系统功能。在 PHP 中使用 money_format 函数而不是扩展是非常愚蠢的。我不明白你为什么要在编程语言的不同操作系统之间创建这样的不一致
money_format()
不适用于 Windows 机器。因此,这是您对印度货币格式的解决方案:
<?php
function inr_money_format($number){
$decimal = (string)($number - floor($number));
$money = floor($number);
$length = strlen($money);
$delimiter = '';
$money = strrev($money);
for($i=0;$i<$length;$i++){
if(( $i==3 || ($i>3 && ($i-1)%2==0) )&& $i!=$length){
$delimiter .=',';
}
$delimiter .=$money[$i];
}
$result = strrev($delimiter);
$decimal = preg_replace("/0\./i", ".", $decimal);
$decimal = substr($decimal, 0, 3);
if( $decimal != '0'){
$result = $result.$decimal;
}
return $result;
}
?>