Come arrotondare un numero al 10 più vicino?
Domanda
Come possiamo arrotondare un numero al 10 più vicino in php?
Supponi di avere 23
, quale codice dovrei usare per arrotondarlo a 30
?
Soluzione
floor ()
scenderà.
ceil ()
salirà.
round ()
andrà al più vicino per impostazione predefinita.
Dividi per 10, fai il ceil, quindi moltiplica per 10 per ridurre le cifre significative.
$number = ceil($input / 10) * 10;
Modifica: lo sto facendo da così tanto tempo .. ma la risposta di TallGreenTree è più pulita.
Altri suggerimenti
round($number, -1);
Questo arrotonderà $ numero al più vicino 10. Puoi anche passare una terza variabile, se necessario, per cambiare la modalità di arrotondamento.
Maggiori informazioni qui: http://php.net/manual/en/function. round.php
In realtà stavo cercando una funzione che potesse arrotondare alla variabile più vicina e questa pagina continuava ad apparire nelle mie ricerche. Quindi, quando alla fine ho finito per scrivere la funzione da solo, ho pensato di pubblicarlo qui per essere trovato da altri.
La funzione verrà arrotondata 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 in 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 si arrotonda, si arrotonda al più vicino 10. Per risolvere questo, aggiungere +5
al numero per arrotondare . Se vuoi arrotondare per difetto, fai -5
.
Quindi nel codice:
round($num + 5, -1);
Non puoi usare la modalità arrotondata
per arrotondare, perché arrotonda solo frazioni e non numeri interi.
Se vuoi arrotondare al 100
più vicino, devi usare +50
.
div per 10, quindi usa ceil e poi mult per 10
Prova
round (23, -1);
Possiamo " imbrogliare " via 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 " negativo " precisione, così 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;
}
$value = 23;
$rounded_value = $value - ($value % 10 - 10);
//$rounded_value is now 30
Prova questo:
ceil($roundee / 10) * 10;
Basta arrotondare per difetto al 10 più vicino, quindi aggiungere 10.
round($num, -1) + 10
Il mio primo impulso è stato google per " php math " e ho scoperto che esiste una funzione di libreria matematica di base chiamata " round () " quello è probabilmente quello che vuoi.
Per le persone che vogliono farlo con SQL raw, senza usare php, java, python ecc.
SET SQL_SAFE_UPDATES = 0;
AGGIORNAMENTO db.table SET valore = ceil (valore / 10) * 10 dove valore non come '% 0';
Volevo arrotondare al numero successivo nella posizione delle cifre più grandi (c'è un nome per quello?), quindi ho realizzato 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
Questo può essere facilmente realizzato usando la funzione PHP ' fmod '. Il codice seguente è specifico di 10 ma è possibile modificarlo 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 si arrotonderà al decimo punto più vicino, aiuta ....
round ($ num, 1);