【问题标题】:Round up decimal number according to fraction in PHP根据PHP中的分数四舍五入十进制数
【发布时间】:2016-03-31 04:27:54
【问题描述】:

我正在努力将 excel 公式转换为 php 函数。现在我面临一个作为分数的问题。请让我解释一下:

  • (2 * 18)/2.98 = 12.08 但根据我的要求应该是 12.25
    • (2 * 18.5)/2.98 = 12.416 但根据我的要求应该是 12.50
    • (2 * 18.8)/2.98 = 12.617 但根据我的要求应该是 12.75

在excel中,它是这样完成的:

  • 上限(( 2 * 18 )/2.98, 0.25) = 12.25
    • 上限(( 2 * 18.5 )/2.98, 0.25) = 12.50
    • 上限(( 2 * 18.8 )/2.98, 0.25) = 12.75

我在 PHP 中尝试过。 Ceil() 和 Floor() 不起作用,因为这 2 个应相应地给出输出 13 和 12。

另一个 round() 使用这些选项 PHP_ROUND_HALF_UP, PHP_ROUND_HALF_DOWN, PHP_ROUND_HALF_EVEN, or PHP_ROUND_HALF_ODD 不能达到目的。

有人帮我吗?

【问题讨论】:

标签: php rounding


【解决方案1】:

使用此功能:

function fractionRound($num,$frac) {
  return ceil($num/$frac)*$frac;
}

这样称呼它:

echo fractionRound(( 2 * 18 )/2.98, 0.25); 

它会四舍五入到最接近的 0.25 它会返回 12.25

【讨论】:

    【解决方案2】:

    PHP 仅提供了使用您找到的选项进行四舍五入的功能。但是,您可以使用一些创造性的数学和用户空间函数来完成与您想要的类似的事情。

    试试:

    function roundTo($value, $roundTo = 1)
    {
        $inverse = 1 / $roundTo;
        return round($value * $inverse) / $inverse;
    }
    

    见:https://ideone.com/fojMrS

    请注意,如果您想要 ceilfloor 功能,则必须为 ceilfloor 创建此功能的版本,这仅适用于 round

    【讨论】:

      【解决方案3】:
      $YourNumber = 12.08;
      $int = $YourNumber * 4;
      $int = ceil($int);
      
      echo $YourNumber ." was the start <br>";
      echo $int / 4 ." is the answer";
      

      【讨论】:

        【解决方案4】:
        function roundQuarters($input)
        {
            $rm = $input % 0.25;
            return $rm == 0 ? $input : $input - $rm + 0.25;
        }
        

        这会将小数四舍五入到最接近的 0.25,如果它也是 0.25 的除数,它将返回相同的值。很简单。

        您可以将 0.25 替换为您想要的任何小数,甚至可以将其参数化。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多