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
?
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.
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
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
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
.
div par 10 puis utilisez ceil puis mult par 10
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;
}
Essayer
round(23, -1);
$value = 23;
$rounded_value = $value - ($value % 10 - 10);
//$rounded_value is now 30
Essaye ça:
ceil($roundee / 10) * 10;
Il suffit d’arrondir au 10 le plus proche, puis d’en rajouter 10.
round($num, -1) + 10
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';
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;
}
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.
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
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