如何在php中将数字四舍五入到最接近的10个数字?
假设我有数字23
,我应该使用什么代码将其四舍五入到30
?
floor()
会向下取整。
ceil()
会向上取整。
round()
默认情况下会四舍五入到最近的整数。
将数值除以10,进行向上取整,再乘以10以减少有效数字。
$number = ceil($input / 10) * 10;
编辑:我一直都这样做,但TallGreenTree的回答更清晰。
(15,-1,PHP_ROUND_HALF_UP);// 20
,(14,-1,PHP_ROUND_HALF_UP);// 10
。 - Arthround($number, -1);
这将把$number四舍五入到最近的10。如果需要改变四舍五入模式,也可以传递第三个参数。
23
会变成 20
而不是 30
,因为它总是会四舍五入到最近的十位。而且四舍五入模式也无法解决问题,因为它只会在小数点后面的一半进行四舍五入。 - Timo002round( $x / $y ) * $y
解决方案,这样可以节省宝贵的时钟周期。不使用除法和乘法可以达到此目的。 - stevendesu我实际上在寻找一种可以将数字四舍五入到最接近的变量的函数,并且这个页面一直出现在我的搜索结果中。因此,当我最终编写了这个函数时,我想在这里发布它,以便其他人可以找到。
该函数将四舍五入到最接近的变量:
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
这个问题有很多答案,可能所有的答案都能给你想要的答案。但是就像@TallGreenTree所提到的,这里有一个函数可以解决这个问题。
然而,@TallGreenTree的答案存在一个问题,它不能向上取整,而是向最近的10取整。为了解决这个问题,你需要在你的数字上添加+5
来进行向上取整。如果您想向下取整,请使用-5
。
所以在代码中:
round($num + 5, -1);
无法使用四舍五入模式
向上舍入,因为该模式只能将小数向上舍入,而不能将整数向上舍入。
如果您想要向上舍入到最接近的100
,则应该使用+50
。
$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;
}
$number = ceil($input * 0.1)/0.1 ;
ceil
更改为 floor
。 - Gavin$value = 23;
$rounded_value = $value - ($value % 10 - 10);
//$rounded_value is now 30
//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;
}
尝试使用
round(23, -1);