【问题标题】:How to round up a number to nearest 10?如何将一个数字四舍五入到最接近的 10?
【发布时间】:2009-10-24 21:58:10
【问题描述】:

我们如何在 php 中将一个数字四舍五入到最接近的 10?

假设我有23,我将使用什么代码将其四舍五入为30

【问题讨论】:

  • 呃,那不是最近的 10吗?
  • 好的,然后将有效数字四舍五入!哈哈
  • 公平地说,在标题中,它说“将一个数字 向上 舍入到最接近的 10”,尽管文字说“四舍五入”......我是很确定他要求总是将 up 舍入到 next 10.
  • 向上取整到 10 的幂,stackoverflow.com/q/43932648/6521116

标签: php rounding


【解决方案1】:

floor() 将关闭。

ceil() 会上升。

round() 默认会到最近的。

除以 10,做 ceil,然后乘以 10 以减少有效数字。

$number = ceil($input / 10) * 10;

编辑:我已经这样做了很长时间了.. 但是 TallGreenTree 的答案更干净。

【讨论】:

  • TallGreenTree 的回答并不总是四舍五入。这个答案是使用 ceil() 最正确的
  • TallGreenTree 的答案确实支持使用 round() 的第三个参数(模式)向上/向下舍入。回合($输入,-1,PHP_ROUND_HALF_UP)
  • @DarenSchwenke,第三个参数并不像你想象的那样工作,它只控制间隔之间正好中间的情况。 (15,-1, PHP_ROUND_HALF_UP); // 20, (14,-1, PHP_ROUND_HALF_UP); // 10
【解决方案2】:
round($number, -1);

这会将 $number 舍入到最接近的 10。如果需要,您还可以传递第三个变量来更改舍入模式。

更多信息在这里:http://php.net/manual/en/function.round.php

【讨论】:

  • 当问题两次“四舍五入”时,你能责怪他们假设提问者的意思是“四舍五入”吗?
  • 这个答案是在提问者澄清自己之前发布的。我只是认为他在问题中的四舍五入不正确。
  • TallGreenTree 是正确的。您可以使用第三个参数设置舍入模式:“PHP_ROUND_HALF_UP、PHP_ROUND_HALF_DOWN、PHP_ROUND_HALF_EVEN 或 PHP_ROUND_HALF_ODD 中的一种模式。”
  • 这并没有给出正确的结果。 23 将是 20 而不是 30,因为它总是会舍入到最接近的 10。舍入模式无济于事,因为这只是在 x. 之后的一半。
  • 遗憾的是 ceil() 和 floor() 还没有精度参数。
【解决方案3】:

我实际上是在寻找一个可以四舍五入到最近变量的函数,而这个页面不断出现在我的搜索中。所以当我最终自己写完这个函数时,我想我会把它贴在这里让其他人找到。

函数将四舍五入到最近的变量:

function roundToTheNearestAnything($value, $roundTo)
{
    $mod = $value%$roundTo;
    return $value+($mod<($roundTo/2)?-$mod:$roundTo-$mod);
}

这段代码:

echo roundToTheNearestAnything(1234, 10).'<br>';
echo roundToTheNearestAnything(1234, 5).'<br>';
echo roundToTheNearestAnything(1234, 15).'<br>';
echo roundToTheNearestAnything(1234, 167).'<br>';

将输出:

1230
1235
1230
1169

【讨论】:

  • 肯尼,你是最棒的。我只希望我有一个图形表示它如何精确地四舍五入,所以我确信它在 100% 的情况下给出了预期的结果。我想我得做一些测试。
  • 有什么办法可以修改这段代码,添加第三个参数为圆形模式HALF_UP / HALF_DOWN?
【解决方案4】:

这个问题有很多答案,可能都会给你你正在寻找的答案。但正如@TallGreenTree 提到的,有一个功能。

但是@TallGreenTree 的答案的问题是它没有四舍五入,它四舍五入到最接近的10。要解决这个问题,请将+5 添加到您的数字中以便四舍五入。如果你想四舍五入,请-5

所以在代码中:

round($num + 5, -1);

您不能使用 round mode 进行四舍五入,因为它只能四舍五入而不是整数。

如果你想四舍五入到最近的100,你应该使用+50

【讨论】:

  • 这不适用于非十进制数。 10 变成 20
【解决方案5】:

除以 10 然后使用 ceil 然后乘以 10

http://php.net/manual/en/function.ceil.php

【讨论】:

    【解决方案6】:

    我们可以通过回合“作弊”

    $rounded = round($roundee / 10) * 10;
    

    我们也可以避免使用浮点除法

    function roundToTen($roundee)
    {
      $r = $roundee % 10;
      return ($r <= 5) : $roundee - $r : $roundee + (10 - $r);
    }
    

    编辑:我不知道(并且网站上没有详细记录)round 现在支持“负”精度,因此您可以更轻松地使用

    $round = round($roundee, -1);
    

    再次编辑:如果你总是想四舍五入,你可以试试

    function roundUpToTen($roundee)
    {
      $r = $roundee % 10;
      if ($r == 0)
        return $roundee;
      return $roundee + 10 - $r;    
    }
    

    【讨论】:

    • 嗨,这非常有效 - 对于这个问题,我该如何四舍五入?所以23到30?
    【解决方案7】:

    试试

    round(23, -1);

    【讨论】:

      【解决方案8】:
      $value = 23;
      $rounded_value = $value - ($value % 10 - 10);
      //$rounded_value is now 30
      

      【讨论】:

        【解决方案9】:

        我想在最大位数的地方四舍五入到下一个数字(有名字吗?),所以我做了以下函数(在 php 中):

        //Get the max value to use in a graph scale axis, 
        //given the max value in the graph
        function getMaxScale($maxVal) {
            $maxInt = ceil($maxVal);
            $numDigits = strlen((string)$maxInt)-1; //this makes 2150->3000 instead of 10000
            $dividend = pow(10,$numDigits);
            $maxScale= ceil($maxInt/ $dividend) * $dividend;
            return $maxScale;
        }
        

        【讨论】:

        • 谢谢,这就是我一直在寻找的,如果数字是 54000,则四舍五入为 60000,如果 5600,则四舍五入为 6000。
        • 不客气@RoshJ,很高兴它对你有所帮助!
        【解决方案10】:

        试试这个:

        ceil($roundee / 10) * 10;
        

        【讨论】:

          【解决方案11】:

          到最近的 10 ,应该如下

          $number = ceil($input * 0.1)/0.1 ;
          

          【讨论】:

            【解决方案12】:

            我的第一个冲动是在谷歌上搜索“php math”,我发现有一个名为“round()”的核心数学库函数可能就是你想要的。

            【讨论】:

              【解决方案13】:

              对于想要使用原始 SQL 而不使用 php、java、python 等的人来说。 SET SQL_SAFE_UPDATES = 0; UPDATE db.table SET value=ceil(value/10)*10 where value not like '%0';

              【讨论】:

                【解决方案14】:
                Hey i modify Kenny answer and custom it not always round function now it can be ceil and floor function
                
                function roundToTheNearestAnything($value, $roundTo,$type='round')
                    {
                        $mod = $value%$roundTo;
                        if($type=='round'){
                            return $value+($mod<($roundTo/2)?-$mod:$roundTo-$mod);
                        }elseif($type=='floor'){
                            return $value+($mod<($roundTo/2)?-$mod:-$mod);
                        }elseif($type=='ceil'){
                            return $value+($mod<($roundTo/2)?$roundTo-$mod:$roundTo-$mod);
                        }
                
                    }
                
                echo roundToTheNearestAnything(1872,25,'floor'); // 1850<br>
                echo roundToTheNearestAnything(1872,25,'ceil'); // 1875<br>
                echo roundToTheNearestAnything(1872,25,'round'); // 1875
                

                【讨论】:

                  【解决方案15】:

                  这可以使用 PHP 'fmod' 函数轻松完成。下面的代码特定于 10,但您可以将其更改为任何数字。

                  $num=97;
                  $r=fmod($num,10);
                  $r=10-$r;
                  $r=$num+$r;
                  return $r;
                  

                  输出:100

                  【讨论】:

                    【解决方案16】:

                    试试这个......传入要四舍五入的数字,它会四舍五入到最接近的十分之一。希望它有帮助....

                    round($num, 1);

                    【讨论】:

                      猜你喜欢
                      • 2017-07-26
                      • 2011-03-21
                      • 2016-03-04
                      • 2013-08-31
                      • 2017-05-03
                      • 1970-01-01
                      • 2012-01-25
                      • 2010-09-24
                      相关资源
                      最近更新 更多