如何将数字四舍五入到最接近的10?

问题描述 投票:0回答:17

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

假设我有

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

php rounding
17个回答
255
投票

floor()
将会下降。

ceil()
将会上升。

round()
默认情况下会前往最近的位置。

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

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

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


180
投票
round($number, -1);

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

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


22
投票

我实际上正在寻找一个可以四舍五入到最近的变量的函数,并且这个页面不断出现在我的搜索中。因此,当我最终自己编写了该函数时,我想我会将其发布在这里供其他人查找。

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

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

13
投票

这个问题有很多答案,或许都能给你你想要的答案。但正如 @TallGreenTree 提到的,有一个函数可以实现这一点。

但是@TallGreenTree的答案的问题是它不会四舍五入,它四舍五入到最接近的10。要解决这个问题,请在您的数字中添加

+5
以四舍五入。如果您想向下舍入,请执行
-5

所以在代码中:

round($num + 5, -1);

您不能使用

round mode
进行四舍五入,因为它只四舍五入分数而不是整数。

如果您想四舍五入到最接近的

100
,您应该使用
+50


7
投票

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

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


3
投票

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

$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;    
}

3
投票

到最接近的10,应如下

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

2
投票

尝试

round(23, -1);


2
投票
$value = 23;
$rounded_value = $value - ($value % 10 - 10);
//$rounded_value is now 30

2
投票

我想四舍五入到最大数字位的下一个数字(有名字吗?),所以我做了以下函数(在 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;
}

1
投票

试试这个:

ceil($roundee / 10) * 10;

0
投票

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


0
投票

对于那些想要使用原始 SQL 而不使用 php、java、python 等的人来说。

SET SQL_SAFE_UPDATES = 0;
UPDATE db.table SET value=ceil(value/10)*10 where value not like '%0';


0
投票
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

0
投票

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

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

输出:100


0
投票

更新 PHP 8.4

自 PHP 8.4 起,您有额外的舍入模式,允许您使用与 precision 参数等效的

ceil()
floor()
函数。

// round() with `floor` like rounding mode
round(23, -1, \RoundingMode::NegativeInfinity); // 20
round(27, -1, \RoundingMode::NegativeInfinity); // 20
    
// round() with `ceil` like rounding mode
round(23, -1, \RoundingMode::PositiveInfinity); // 30
round(27, -1, \RoundingMode::PositiveInfinity); // 30

-2
投票

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

round($num, 1);

© www.soinside.com 2019 - 2024. All rights reserved.