web-dev-qa-db-fra.com

Comment arrondir un nombre au 10 près?

Comment pouvons-nous arrondir un nombre à la dizaine près en php?

Disons que j'ai 23, quel code pourrais-je utiliser pour arrondir 30?

79
tarnfeld

floor() va descendre. 

ceil() va augmenter. 

round() ira au plus proche par défaut.

Divisez par 10, faites le plafond, puis multipliez par 10 pour réduire les chiffres significatifs.

$number = ceil($input / 10) * 10;

Edit: Je le fais depuis si longtemps ... mais la réponse de TallGreenTree est plus nette.

169
Daren Schwenke
round($number, -1);

Cela arrondira $ nombre au 10 le plus proche. Vous pouvez également passer une troisième variable si nécessaire pour changer le mode d'arrondi.

Plus d'infos ici: http://php.net/manual/en/function.round.php

151
TallGreenTree

En fait, je cherchais une fonction pouvant arrondir à la variable la plus proche, et cette page revenait sans cesse dans mes recherches. Alors, quand j'ai finalement fini par écrire moi-même la fonction, j'ai pensé la poster ici pour que les autres puissent la trouver.

La fonction arrondira à la variable la plus proche:

function roundToTheNearestAnything($value, $roundTo)
{
    $mod = $value%$roundTo;
    return $value+($mod<($roundTo/2)?-$mod:$roundTo-$mod);
}

Ce code:

echo roundToTheNearestAnything(1234, 10).'<br>';
echo roundToTheNearestAnything(1234, 5).'<br>';
echo roundToTheNearestAnything(1234, 15).'<br>';
echo roundToTheNearestAnything(1234, 167).'<br>';

Est-ce que la sortie:

1230
1235
1230
1169
11
Kenny

Il y a beaucoup de réponses dans cette question, probablement tout le monde va vous donner la réponse que vous cherchez. Mais comme @TallGreenTree le mentionne, il existe une fonction pour cela.

Mais le problème de la réponse de @TallGreenTree est qu’il n’arrondit pas, il arrondit au 10 le plus proche. Pour résoudre ceci, ajoutez +5 à votre numéro afin d’arrondir. Si vous voulez arrondir, faites -5.

Donc dans le code:

round($num + 5, -1);

Vous ne pouvez pas utiliser le round mode pour arrondir, car il arrondit uniquement les fractions et non les nombres entiers.

Si vous voulez arrondir au 100 le plus proche, vous devez utiliser +50.

9
Timo002

div par 10 puis utilisez ceil puis mult par 10

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

7
Johnno Nolan

Nous pouvons "tricher" via round avec

$rounded = round($roundee / 10) * 10;

Nous pouvons également éviter de passer par la division en virgule flottante avec

function roundToTen($roundee)
{
  $r = $roundee % 10;
  return ($r <= 5) : $roundee - $r : $roundee + (10 - $r);
}

Edit: Je ne savais pas (et ce n’est pas bien documenté sur le site) que round supporte maintenant la précision "négative", vous pouvez donc plus facilement utiliser

$round = round($roundee, -1);

Modifier à nouveau: si vous voulez toujours arrondir, vous pouvez essayer

function roundUpToTen($roundee)
{
  $r = $roundee % 10;
  if ($r == 0)
    return $roundee;
  return $roundee + 10 - $r;    
}
2
Adam Wright

Essayer

round(23, -1);

2
Artyom Sokolov
$value = 23;
$rounded_value = $value - ($value % 10 - 10);
//$rounded_value is now 30
2
wormhit

Essaye ça:

ceil($roundee / 10) * 10;
1
tarnfeld

Il suffit d’arrondir au 10 le plus proche, puis d’en rajouter 10.

round($num, -1) + 10
1
Scott Tesler

Pour les personnes qui veulent le faire avec du SQL brut, sans utiliser php, java, python, etc. SET SQL_SAFE_UPDATES = 0; UPDATE db.table SET value=ceil(value/10)*10 where value not like '%0';

0
Nagibaba

Je voulais arrondir au nombre suivant dans le plus grand nombre de chiffres (y a-t-il un nom pour cela?), Alors j'ai créé la fonction suivante (en 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;
}
0
Robert

Ma première impulsion a été de rechercher «php math» sur Google et j'ai découvert qu'il existe une fonction de base de bibliothèque de mathématiques appelée «round ()» qui correspond probablement à ce que vous voulez.

0
Berry

Ceci peut être facilement accompli en utilisant la fonction PHP ' fmod '. Le code ci-dessous est spécifique à 10, mais vous pouvez le remplacer par n’importe quel nombre. 

$num=97;
$r=fmod($num,10);
$r=10-$r;
$r=$num+$r;
return $r;

SORTIE: 100

0
The Bad Brad
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
0
Rifat