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


99

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

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


51
嗯,那不是最接近的 10?
罗兰·肖

1
好的,然后舍入到1个有效数字!哈哈
塔恩费尔德

3
为了公平起见,在标题中,它说:“圆一个数字,以最近10”,尽管文中说“四舍五入” ......我敢肯定,他要求总是圆下一个 10
亚伦Wallentine

1
取整为10的幂,stackoverflow.com
q/43932648/6521116

Answers:


218

floor() 会下降。

ceil() 会上升。

round() 默认情况下会最接近。

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

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

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


4
TallGreenTree的答案并不总是将其四舍五入。这个答案是使用ceil()的最正确方法
Brandon

1
TallGreenTree的答案确实支持使用round()的第三个参数(模式)向上/向下取整。round($ input,-1,PHP_ROUND_HALF_UP)
达伦·

4
@DarenSchwenke,第三个参数并不像您想象的那样有效,它仅控制间隔之间恰好中间的情况。(15,-1, PHP_ROUND_HALF_UP); // 20(14,-1, PHP_ROUND_HALF_UP); // 10
Arth

168
round($number, -1);

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

此处的更多信息:http : //php.net/manual/zh/function.round.php


11
当问题两次说“四舍五入至最接近的10”时,您能怪他们假设发问者的意思是“四舍五入至最接近的10”吗?
ceejayoz

在提问者澄清自己之前就发布了这个答案。我只是觉得他在这个问题上没有正确取整。
TallGreenTree

12
TallGreenTree是正确的。您可以使用第三个参数设置舍入模式:“ PHP_ROUND_HALF_UP,PHP_ROUND_HALF_DOWN,PHP_ROUND_HALF_EVEN或PHP_ROUND_HALF_ODD的模式之一。”
d -_- b

13
这不会给出正确的结果。2320而不是30因为它总是会一直拉近到最接近的10。舍入模式将无济于事,因为它仅在后面舍入一半x.
Timo002 2014年

1
遗憾的是,ceil()和floor()尚不具有precision参数。
squarecandy15年

15

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

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

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%的情况下提供预期的结果。我想我必须做一些测试。
Alph.Dev

有什么方法可以修改此代码,以使用回合模式HALF_UP / HALF_DOWN添加第三个参数?
Alph.Dev

12

这个问题有很多答案,可能所有人都会为您提供所需的答案。但是正如@TallGreenTree提到的那样,有一个函数。

但是@TallGreenTree答案的问题是它没有四舍五入,而是四舍五入到最接近的10。要解决此问题,请添加+5您的数字以四舍五入。如果要四舍五入,请执行-5

因此在代码中:

round($num + 5, -1);

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

如果要四舍五入到最接近的值100,则应使用+50


这不适用于非十进制数字。10变成20
卢西亚诺



2

我们可以通过以下方式“欺骗”

$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?
塔恩费尔德

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


0

我的第一个冲动是去Google搜索“ 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

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

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

到最接近的10,应如下

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

-2

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

round($ num,1);

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.