Php 转换ToMoney功能不工作

Php 转换ToMoney功能不工作,php,currency,Php,Currency,函数不适用于前缀为8[任何数字]的情况 输入:970输出:9.70美元 输入:870输出:$870 投入:800产出:800美元 function toMoney( $val, $symbol = '$', $r = 2 ) { $n = $val; $c = is_float($n) ? 1 : number_format( $n , $r ); $d = '.'; $t = ','; $sign = ( $n < 0 ) ? '-' : '';

函数不适用于前缀为8[任何数字]的情况

输入:970输出:9.70美元
输入:870输出:$870
投入:800产出:800美元

function toMoney( $val, $symbol = '$', $r = 2 ) {
    $n = $val; 
    $c = is_float($n) ? 1 : number_format( $n , $r );
    $d = '.';
    $t = ',';
    $sign = ( $n < 0 ) ? '-' : '';
    $i = $n = number_format( abs( $n ), $r ); 
    $j = ( ( $j = $i.length ) > 3 ) ? $j % 3 : 0; 

   return  $symbol.$sign .( $j ? substr( $i, 0, $j) + $t : '').preg_replace('/(\d{3})(?=\d)/',"$1" + $t,substr($i,$j)) ;
}
函数toMoney($val,$symbol='$',$r=2){ $n=$val; $c=是浮点数($n)?1:数字格式($n,$r); $d='; $t=','; $sign=($n<0)?'-':''; $i=$n=number\u格式(abs($n),$r); $j=($j=$i.length)>3)?$j%3:0; 返回$symbol.$sign.($j?substr($i,0,$j)+$t:“”)。preg_replace('/(\d{3})(?=\d)/',“$1”+$t,substr($i,$j)); } 功能取自:

上述错误已在以下步骤中更正

  function toMoney( $val, $symbol = '$', $r = 2 ) {
        $n = $val; 
        $c = is_float($n) ? 1 : number_format( $n , $r );
        $d = '.';
        $t = ',';
        $sign = ( $n < 0 ) ? '-' : '';
        $i = $n = number_format( abs( $n ), $r ); 
        $j = ( ( $j = strlen($i) ) > 3 ) ? $j % 3 : 0; 

       return  $symbol.$sign .( $j ? substr( $i, 0, $j) + $t : '').preg_replace('/(\d{3})(?=\d)/',"$1" + $t,substr($i,$j)) ;
    }
函数toMoney($val,$symbol='$',$r=2){ $n=$val; $c=是浮点数($n)?1:数字格式($n,$r); $d='; $t=','; $sign=($n<0)?'-':''; $i=$n=number\u格式(abs($n),$r); $j=($j=strlen($i))>3)?$j%3:0; 返回$symbol.$sign.($j?substr($i,0,$j)+$t:“”)。preg_replace('/(\d{3})(?=\d)/',“$1”+$t,substr($i,$j)); }
如果我理解得很好,你希望最后两个数字是美分吗

那么,我们为什么不:

$val = number_format(intval(substr($val,0,strlen($val)-2)),).'.'.substr($val,-2);
第一个
substr
只会忘记最后两位数字,然后只使用千位分隔符进行格式化。
第二个
substr
只取最后两个数字。

试过了,670得到了670.00美元,800得到了800.00美元,但我只得到了800美元
$i.length
?这在PHP中是什么类型的符号?另外,您正在使用
+
作为字符串concat运算符,而您应该使用
,例如,请参阅您的最后一行。@Sankalp Mishra请仔细检查您的输入和输出,请告诉我您的PHP版本。有人建议修复上述函数也许您也应该在这里说几句话,不要只是发布代码。+1来使用本机PHP函数,而不重新发明轮子
setlocale(LC_MONETARY, 'en_US');
echo '$' . money_format('%i', $number/100) . "\n";