【问题标题】:Trim zeros from decimal part php从小数部分php修剪零
【发布时间】:2017-01-27 01:38:18
【问题描述】:

我的确切要求是,如果值的第二个小数为零, 该值应该只有一位小数。对于其他人,它应该有两位小数。

eg 1. 150.00 to 150.0  
eg 2. 150.10 to 150.1  
eg 3. 150.76 to 150.76

我需要知道的是是否有任何 PHP 函数可以做到这一点。

echo floatval("150.00")."<br>";
echo floatval("150.10")."<br>";
echo floatval("150.76")."<br>";

结果如下:

150
150.1
150.76

我需要150.0而不是150。我只需要知道是否有任何php函数。否则我将能够编写代码。

【问题讨论】:

  • 你有没有尝试过什么来满足你的要求???
  • 尝试将其转换为 floatval() 例如:$num = floatval(150.10);
  • PS:这可能会在 150.00 失败。把它变成字符串并检查rtrim()函数
  • 看到你选择的答案清楚表明你真的不知道如何描述问题。
  • @hummingBird : 可能回答的人理解得更好。

标签: php number-formatting


【解决方案1】:

如果最后一个字符为 0,你也可以使用 substr() 函数来删除它。可能下面的代码会帮助你

function roundit($string)
{
 $string = number_format($string,2);
 if (substr($string, -1, 1) == '0')
 {
  $string = substr($string, 0, -1);
  echo $string;
 }
 else
 echo $string;
}
roundit('150.00');
roundit('150.10');
roundit('150.76');

【讨论】:

  • 实际上,这并不像 op 所说的那样。他说:“如果值的第二个小数为零,则该值应该只有一个小数。对于其他的,它应该有两个小数。”如果我输入roundit(152.333332),它将输入相同的数字:)。并且他明确地说“对于其他人,它应该有两位小数。”我猜 OP 并不真正知道他需要什么 ;)
  • 在这种情况下,他可以使用 number_format() 函数精确地得到 2 位小数。更新了答案并添加了这一点
  • 它仍然不适用于例如100.4320 -> 它会给出 100.432。您应该首先对其进行 number_format ,然后剪切尾随零(如果有)。显然,他仍然想要.0
  • @Azeez Kallayi :您提供的答案会很好,因为我只使用两位小数。在我提供的示例中,它涵盖了案例。
【解决方案2】:

您可以编写一个简单的函数来帮助您解决这个问题。像这样的东西可以解决问题:

<?php

    function removeTrailingZero($num){
        $num    = floatval($num);
        $pieces = explode(".", $num);
        for($i=0; $i<count($pieces); $i++){
            if(isset($pieces[1])){
                $pieces[1] = preg_replace("#0*$#", "", $pieces[1]);
                break;
            }else{
                $pieces[1]  = '0';
                break;
            }
        }
        return rtrim(implode(".", $pieces), ".");
        //return floatval(rtrim(implode(".", $pieces), "."));
    }

    var_dump(removeTrailingZero(123.45));
    var_dump(removeTrailingZero(67.80));
    var_dump(removeTrailingZero(90));
    var_dump(removeTrailingZero(100.00000));

    // PRODUCES:::
    string '123.45'    (length=6)
    string '67.8'      (length=4)
    string '90.0'      (length=4)
    string '100.0'     (length=5)

【讨论】:

  • 感谢您的努力。我需要 100.0 而不是 100。我可以根据我的要求编辑您的代码。
  • 很简单。只需在for 循环内的条件if 中添加一个else 子句,然后将“0”分配给$pieces[1] 变量。帖子现在已更新以考虑到这一点。但是,您现在冒着将STRING 作为该函数的返回数据类型的风险...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
  • 2020-08-16
  • 1970-01-01
  • 2018-07-08
  • 2016-12-14
  • 1970-01-01
相关资源
最近更新 更多