【问题标题】:php - add comma thousands separator but remove trailing zerosphp - 添加逗号千位分隔符但删除尾随零
【发布时间】:2022-04-16 14:00:40
【问题描述】:

我正在尝试使用 PHP 将数字格式化为

  1. 删除所有尾随零

  2. 为千位分隔符添加逗号

  3. 列出两个小数点,假设它们不是零

我试过这个,但它并没有完全达到我想要达到的效果:

$prices[$title]['reg_price'] = (float)number_format($membership->sell_price, 2, ".", "");
$prices[$title]['three_year_price'] = (float)number_format($membership->attributes[$aid]->options[$three_year_oid]->price, 2, ".", "");

我发现我可以通过将数字转换为浮点数来去除尾随零。但是,我发现我需要告诉 number_format 不要使用千位逗号分隔符,因为否则,将 1,500.00 转换为浮点数时,结果为 1。

因此,总而言之,我希望我的代码将 1500.00 更改为 1,500,将 150.00 更改为 150,将 19.99 更改为 19.99。我怎样才能做到这一点?

【问题讨论】:

    标签: php


    【解决方案1】:
    function parseCurrency($value) {
        if ( intval($value) == $value ) {
            $return = number_format($value, 0, ".", ",");
        }
        else {
            $return = number_format($value, 2, ".", ",");
            /*
            If you don't want to remove trailing zeros from decimals,
            eg. 19.90 to become: 19.9, remove the next line
            */
            $return = rtrim($return, 0);
        }
    
        return $return;
    }
    
    $prices[] = parseCurrency(1500.00);
    $prices[] = parseCurrency(1500.10);
    $prices[] = parseCurrency(1500.1);
    $prices[] = parseCurrency(1500);
    $prices[] = parseCurrency(123.53);
    $prices[] = parseCurrency(1224323.53);
    $prices[] = parseCurrency(19.99);
    
    print_r($prices);
    

    输出:

    Array
    (
        [0] => 1,500
        [1] => 1,500.1
        [2] => 1,500.1
        [3] => 1,500
        [4] => 123.53
        [5] => 1,224,323.53
        [6] => 19.99
    )
    

    【讨论】:

    • 这正是我需要的(是的,我会删除 rtrim 行)。谢谢!
    【解决方案2】:

    这会插入逗号,四舍五入到小数点后 2 位,删除尾随零,并删除尾随 '.':

    rtrim(rtrim(number_format($value,2),0),'.')
    

    【讨论】:

      【解决方案3】:

      你可以使用

      ltrim($var, '0'); 
      

      删除前导0。和

      rtrim($var, '0');
      

      删除尾随。

      【讨论】:

      • 这并不完美 - 它仍然在数字末尾留下一个小数,我仍然需要检查数字以查看最后一个字符是否为 . ,如果是,删除它
      【解决方案4】:

      用于替换“.”到“,”你可以使用一个函数:

      function replace_dot($value) {
          $str = str_replace('.', ',', $value);
          return $str;
      }
      

      【讨论】:

      • 这还需要一些附加代码:这会将 19.99 变成 19,99
      • 你可以在你觉得舒服的地方使用该功能,19.99的情况下不要使用它。或者您可以添加if (strlen($str) !=5) { //do the statement replace }
      • 但是你打算如何使用这个功能呢?您的示例中的 $value 是什么?我可以创建数字 1500 或 1,500.00,而您的函数也无济于事。
      • 我当然愿意。我只是说,我的代码产生 1500 或 1,500.00,将其中任何一个输入到您的函数中都不会给我 1,500
      • @Alex,你读过他想要的吗? 1)删除所有尾随零,2)为千位分隔符添加逗号,3)列出两个小数点,假设它们不是零。您的建议都没有,只替换十进制来自 . (点)到 ,(逗号),不删除尾随零或添加 ,(逗号)作为千位分隔符。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-27
      • 2012-11-17
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 2021-10-16
      相关资源
      最近更新 更多