Come possiamo arrotondare un numero al 10 più vicino in php?
Diciamo che ho 23
, quale codice dovrei usare per arrotondarlo 30
?
Come possiamo arrotondare un numero al 10 più vicino in php?
Diciamo che ho 23
, quale codice dovrei usare per arrotondarlo 30
?
Risposte:
floor()
andrà giù.
ceil()
salirà.
round()
andrà al più vicino per impostazione predefinita.
Dividi per 10, esegui il ceil, quindi moltiplica per 10 per ridurre le cifre significative.
$number = ceil($input / 10) * 10;
Modifica: l'ho fatto in questo modo per così tanto tempo .. ma la risposta di TallGreenTree è più pulita.
(15,-1, PHP_ROUND_HALF_UP); // 20
,(14,-1, PHP_ROUND_HALF_UP); // 10
round($number, -1);
Questo arrotonderà $ numero al 10. È anche possibile passare una terza variabile, se necessario, per modificare la modalità di arrotondamento.
Maggiori informazioni qui: http://php.net/manual/en/function.round.php
23
sarà 20
e non 30
perché girerà sempre al 10. La modalità di arrotondamento non aiuterà, poiché questa è solo la metà rotonda, dopo il x.
.
In realtà stavo cercando una funzione che potesse arrotondare alla variabile più vicina e questa pagina continuava a comparire nelle mie ricerche. Quindi, quando finalmente ho finito per scrivere la funzione da solo, ho pensato di pubblicarla qui affinché gli altri la trovassero.
La funzione arrotonderà alla variabile più vicina:
function roundToTheNearestAnything($value, $roundTo)
{
$mod = $value%$roundTo;
return $value+($mod<($roundTo/2)?-$mod:$roundTo-$mod);
}
Questo codice:
echo roundToTheNearestAnything(1234, 10).'<br>';
echo roundToTheNearestAnything(1234, 5).'<br>';
echo roundToTheNearestAnything(1234, 15).'<br>';
echo roundToTheNearestAnything(1234, 167).'<br>';
Produrrà:
1230
1235
1230
1169
Ci sono molte risposte a questa domanda, probabilmente tutte ti daranno la risposta che stai cercando. Ma come menziona @TallGreenTree, esiste una funzione per questo.
Ma il problema della risposta di @TallGreenTree è che non arrotonda per eccesso, arrotonda al 10. Per risolvere questo problema, aggiungi +5
al tuo numero per arrotondare per eccesso . Se vuoi arrotondare per difetto, fallo -5
.
Quindi nel codice:
round($num + 5, -1);
Non puoi usare round mode
per arrotondare, perché questo arrotonda solo per eccesso le frazioni e non i numeri interi.
Se vuoi arrotondare al più vicino 100
, dovresti usare +50
.
div per 10 quindi usa ceil quindi mult per 10
Provare
round(23, -1);
Possiamo "barare" tramite round con
$rounded = round($roundee / 10) * 10;
Possiamo anche evitare di passare attraverso la divisione in virgola mobile con
function roundToTen($roundee)
{
$r = $roundee % 10;
return ($r <= 5) : $roundee - $r : $roundee + (10 - $r);
}
Modifica: non sapevo (e non è ben documentato sul sito) che round
ora supporta la precisione "negativa", quindi puoi usare più facilmente
$round = round($roundee, -1);
Modifica di nuovo: se vuoi sempre arrotondare, puoi provare
function roundUpToTen($roundee)
{
$r = $roundee % 10;
if ($r == 0)
return $roundee;
return $roundee + 10 - $r;
}
Volevo arrotondare per eccesso al numero successivo nella posizione delle cifre più grandi (c'è un nome per quello?), Quindi ho creato la seguente funzione (in 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
Ciò può essere facilmente ottenuto utilizzando la funzione " fmod " di PHP . Il codice seguente è specifico per 10 ma puoi cambiarlo con qualsiasi numero.
$num=97;
$r=fmod($num,10);
$r=10-$r;
$r=$num+$r;
return $r;
USCITA: 100
Prova questo ...... passa il numero da arrotondare e verrà arrotondato al decimo più vicino. Spero che aiuti ....
round ($ num, 1);