【问题标题】:PHP number format with integer format整数格式的 PHP 数字格式
【发布时间】:2016-10-29 05:21:45
【问题描述】:

我用PHPnumber_format表示产品的价格,使用小数点、千位分隔符等。例如:

$price = 20.456;
print "$" . number_format($price, 2, ".", ",");

输出$20.46。

但是,如果价格是整数,例如$price = 20.00,我希望输出$20。是否有其他功能或规则来实现这一点,如果不需要,避免使用小数点?

【问题讨论】:

  • 我选择 billyonecan 解决方案,因为它非常优雅。我认为函数本身可能有一个“尊重”整数的参数,但事实并非如此,它足以满足 if-else 比较,三元形式非常优雅。

标签: php format decimal


【解决方案1】:

试试$price = 20.456 +0 ;

$price + 0 does the trick.

echo  125.00 + 0; // 125
echo '125.00' + 0; // 125
echo 966.70 + 0; // 966.7

在内部,这相当于使用 (float)$price 或 floatval($price) 强制转换为浮动,但我发现它更简单。

【讨论】:

  • 但这不是我们想要的结果,只有当价格是一个整数时才应该删除尾随零
  • @billyonecan 你可以试试echo 1000000 + 0; // 1000000
  • echo 966.70 + 0; // 966.7 - 想要的结果是966.70
  • 是的。在我们执行+0之前我们必须编写一个函数来定价,谢谢您的建议,您有什么解决方案吗?
【解决方案2】:

您可以使用三元运算符:

    $price = 20.456;
    print "$" . ($price == intval($price) ? number_format($price, 0, "", ",") : number_format($price, 2, "", ","));

【讨论】:

    【解决方案3】:

    你可以使用floor()函数

    $price = 20.456;
    echo '$'.floor($price); // output $20
    

    【讨论】:

      【解决方案4】:

      一个小辅助函数my_format判断数字是否为整数,然后返回对应的字符串。

      function my_format($number)
      {
          if (fmod($number, 1) == 0) {
              return sprintf("$%d\n", $number);
          } else {
              return sprintf("$%.2f\n", $number);
          }
      }
      
      $price = 20.456;
      
      echo my_format($price);
      echo my_format(20);
      

      会输出

      $20.46 $20

      【讨论】:

        【解决方案5】:

        适用于任何数字的小解决方案

        $price = "20.5498";
        $dec = fmod($price, 1);
        if($dec > 0)
            print "$" . number_format($price, 2, ".", ",");
        else
            print "$" . floor($price);;
        

        【讨论】:

          【解决方案6】:

          只需将$price 转换为整数与$price 进行松散比较,如果它们匹配(即它是一个整数),您可以格式化为0 个小数位:

          number_format($price, ((int) $price == $price ? 0 : 2), '.', ',');
          

          【讨论】:

            猜你喜欢
            • 2016-01-19
            • 2011-09-12
            • 1970-01-01
            • 2011-09-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-27
            相关资源
            最近更新 更多