【问题标题】:Decimal money format十进制货币格式
【发布时间】:2013-01-09 10:07:53
【问题描述】:

如何在不爆炸数字或字符串的情况下将所有数字转换为 xx,xx 十进制格式? 喜欢;

8,9 --> 8,90

8,99 --> 8,99

12,1 --> 12,10

129,9 --> 129,90

有什么想法吗?

【问题讨论】:

  • @Rikesh 不适用于带有逗号的值
  • @Pekka웃 带逗号的值不是数字,而是字符串。好的,就目前看来,您是正确的,该操作实际上是在谈论看起来像数字的字符串;)
  • @KingCrunch 逗号在英美世界以外的许多地方都是有效的小数分隔符。我想这是他的问题。 (编辑:啊,看看你的位置,你就知道了:)

标签: php numbers format money-format


【解决方案1】:

您可以使用number_format 喜欢:

$n = 2.1;
echo number_format($n, 2, ','); // 2,10

如果您的输入中有逗号作为小数分隔符,您可以将值转换为浮点数:

$number = floatval(str_replace(',', '.', str_replace('.', '', $string_number)));

str_replace('.', '', $string_number) 用于删除千位分隔符。 str_replace(',', '.', ... ) 用于将逗号替换为点。

【讨论】:

    【解决方案2】:

    如果您启用了intl 扩展,则该问题的最佳解决方法 (IMO) 将在此问题的公认答案中给出:PHP: unformat money

    你可以使用

    手册示例:

    $formatter = new NumberFormatter('de_DE', NumberFormatter::CURRENCY);
    var_dump($formatter->parseCurrency("75,25 €", $curr));
    

    给:float(75.25)

    请注意,intl extension 默认情况下未启用。请 参考Installation Instructions

    之后,您将获得一个浮点值和格式,这是使用 number_format() 的一个小问题。

    如果您没有该扩展名,请查看此问题中的正则表达式方法:What a quick way to clean up a monetary string

    【讨论】:

      【解决方案3】:

      $money = number_format($number, 2, ",", ","); // $number must be a float, i.e 8.8

      如果您的输入必须使用逗号作为小数分隔符,请也这样做:

      $money = "20,2";
      $fixed_money = floatval(str_replace(",", ".", $money));
      echo number_format($fixed_money, 2, ",", ",");
      

      【讨论】:

        【解决方案4】:

        str_pad 将添加缺失的零

        $val = '1008,95';
        $len = strpos($val, ',') + 3;
        $newval = str_pad($val, $len, '0', STR_PAD_RIGHT);
        echo "Value: " . $newval . "<br>";
        

        不过,您必须确保您的值不超过两位小数

        【讨论】:

          【解决方案5】:

          我制作了一个作曲家包,可以根据您显示的货币来处理此类事情。

          https://packagist.org/packages/votemike/money

          如果您还输入国家/地区,它将以当地方式格式化货币(带或不带逗号,并带有正确的小数位数)

          $money = new Money(99.50, 'JPY');
          $money->format(); //¥100
          

          因此,如果您只是创建一个新的货币对象,其中包含您想要显示的金额和您正在显示它的货币,那么在该对象上调用 ->format() 应该会为您提供您正在寻找的结果。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-01-24
            • 1970-01-01
            • 1970-01-01
            • 2011-03-29
            • 2023-04-02
            • 1970-01-01
            相关资源
            最近更新 更多