Domanda

Come possiamo arrotondare un numero al 10 più vicino in php?

Supponi di avere 23 , quale codice dovrei usare per arrotondarlo a 30 ?

È stato utile?

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

http://php.net/manual/en/function.ceil.php

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);

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top