【问题标题】:Convert ToMoney function not working转换 ToMoney 功能不起作用
【发布时间】:2013-02-18 07:44:07
【问题描述】:

函数不适用于带有 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)) ;
}

函数取自:Money conversion not worked

上面的错误在下面更正了

  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)) ;
    }

【问题讨论】:

  • 试了一下,670 美元 670.00 美元,800 美元 800.00 美元
  • 但我只得到 800 美元
  • $i.length ? PHP 中的符号是什么?此外,您使用+ 作为字符串连接运算符,而您应该使用.,例如,请参阅您的最后一行。
  • @Sankalp Mishra 请仔细检查您的输入和输出,请告诉我您的 PHP 版本。
  • 有人建议修复上述功能

标签: php currency


【解决方案1】:

如果我理解得很好,你希望最后两个数字是美分吗?

那么为什么不干呢:

$val = number_format(intval(substr($val,0,strlen($val)-2)),).'.'.substr($val,-2);

第一个substr 将忘记最后两位数字,然后将仅使用千位分隔符进行格式化。 第二个substr 只取最后两个数字。

【讨论】:

    【解决方案2】:
    setlocale(LC_MONETARY, 'en_US');
    echo '$' . money_format('%i', $number/100) . "\n";
    

    【讨论】:

    • 或许你也应该在这里放几句,不要只是贴代码。
    • +1 用于使用原生 PHP 函数,无需重新发明轮子
    猜你喜欢
    • 2021-01-17
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多