如何在php中将数字四舍五入到最接近的10?
说我有23
,我将使用什么代码将其四舍五入30
?
如何在php中将数字四舍五入到最接近的10?
说我有23
,我将使用什么代码将其四舍五入30
?
Answers:
floor()
会下降。
ceil()
会上升。
round()
默认情况下会最接近。
除以10,得出ceil,然后乘以10以减少有效数字。
$number = ceil($input / 10) * 10;
编辑:我已经这样做了很长时间..但是TallGreenTree的答案是更干净。
(15,-1, PHP_ROUND_HALF_UP); // 20
,(14,-1, PHP_ROUND_HALF_UP); // 10
round($number, -1);
这会将$ number舍入到最接近的10。如果需要更改舍入模式,还可以传递第三个变量。
此处的更多信息:http : //php.net/manual/zh/function.round.php
23
会20
而不是30
因为它总是会一直拉近到最接近的10。舍入模式将无济于事,因为它仅在后面舍入一半x.
。
我实际上是在寻找可以四舍五入到最接近变量的函数,并且此页面一直出现在我的搜索中。因此,当我最终自己编写函数时,我想将其发布在这里供其他人查找。
该函数将舍入到最接近的变量:
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
div除以10,然后使用ceil,然后乘以10
尝试
round(23, -1);
我们可以通过以下方式“欺骗”
$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;
}
我想四舍五入到最大位数处的下一个数字(是否有名称?),所以我做了以下函数(在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;
}
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