【问题标题】:How to split float in PHP?如何在 PHP 中拆分浮点数?
【发布时间】:2011-06-29 09:29:23
【问题描述】:

假设我们有 12.054,我想将其拆分为三个变量,例如 $whole_number=12 $numerator=54$denominator=1000。你能帮帮我吗?

【问题讨论】:

  • 这样做的目的是什么?您想如何使用它们?
  • 您可能永远不会真正拥有这样的数字,因为 54/100 不是 2 的幂的和。所以充其量你可以进行任意四舍五入并得到一些近似答案。或者更简单地说,如果$x = 1.0/3.0;,你想要33/100、333/1000还是3333/10000?
  • @Kerrek SB 我通过 html 表单手动输入号码

标签: php math numbers


【解决方案1】:

一种直截了当的方法 - 不是很学术,但它适用于 PHP ;-):

$float        = 12.054;
$parts        = explode('.', (string)$float);
$whole_number = $parts[0];
$numerator    = trim($parts[1], '0');
$denominator  = pow(10, strlen(rtrim($parts[1], '0')));

可能需要做更多的工作来确保边缘情况也能正常工作(尾随 0s,根本没有小数部分,等等)。

【讨论】:

  • 如果您可能达到整数限制,则只需删除(int)-cast,这不是必需的。 $whole_number$numerator 将是字符串。
  • 如果我不使用 int 那么 $numerator 将是 054,我怎样才能删除那些零?
  • 编辑了示例 - 现在使用 trim()$numerator 中删除训练和前导 0s
  • 是否有可能从 $float = 1/3 $numerator = 1 和 $denominator = 3 获得(当然不是使用此代码)或者因为精度而没有?
【解决方案2】:

这里有一些基于简单类型转换的内容。

http://codepad.org/7ExBhTMS

但是,有很多情况需要考虑:

  1. 前置/后置零。 12.0540(对你来说是 540/10000 或 54/1000)

  2. 处理没有小数部分的小数,例如。 12 点。

    $val = 12.054;
    print_r(splitter($val));
    
    function splitter($val)
    {
      $str = (string) $val ;
      $splitted = explode(".",$str);
      $whole = (integer)$splitted[0] ;
      $num = (integer) $splitted[1];
      $den = (integer)  pow(10,strlen($splitted[1]));
      return array('whole' => $whole, 'num' => $num,'den' => $den);
    }
    
    
    
    ?>
    

【讨论】:

    【解决方案3】:

    试试这个

    <?
    $no = 12.54;
    $arr = explode(".", $no);
    
    $full_no = $arr[0].$arr[1];
    
    for($i = 0; $i < strlen($arr[1]); $i++) $denominator = $denominator."0";
    
    $denominator = "1".$denominator;
    
    $numerator = $full_no % $denominator;
    
    $whole_no = $full_no / $denominator;
    
    echo "Denominator = ". $denominator ."<br>";
    
    echo "Numerator = ". $numerator ."<br>";
    
    echo "Whole No = ". (int)$whole_no ."<br>";
    ?>
    

    输出:

    Denominator = 100
    Numerator = 54
    Whole No = 12
    

    12.054 的输出:

    Denominator = 1000
    Numerator = 54
    Whole No = 12
    

    希望对你有帮助..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-20
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-09
      相关资源
      最近更新 更多