Comment arrondir un nombre à la dizaine de php près?
Dites que j'ai 23
, quel code utiliserais-je pour l'arrondir 30
?
Comment arrondir un nombre à la dizaine de php près?
Dites que j'ai 23
, quel code utiliserais-je pour l'arrondir 30
?
Réponses:
floor()
descendra.
ceil()
va monter.
round()
ira au plus proche par défaut.
Divisez par 10, faites le ceil, puis multipliez par 10 pour réduire les chiffres significatifs.
$number = ceil($input / 10) * 10;
Edit: Je le fais de cette façon depuis si longtemps ... mais la réponse de TallGreenTree est plus propre.
(15,-1, PHP_ROUND_HALF_UP); // 20
,(14,-1, PHP_ROUND_HALF_UP); // 10
round($number, -1);
Cela arrondira $ number au 10. 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
23
sera 20
et non 30
car il sera toujours rond au 10. Le mode d'arrondi n'aidera pas, puisque ce seul arrondi de moitié, après le x.
.
Je cherchais en fait une fonction qui pourrait arrondir à la variable la plus proche, et cette page revenait sans cesse dans mes recherches. Donc, quand j'ai finalement fini par écrire la fonction moi-même, j'ai pensé que je la publierais ici pour que d'autres la trouvent.
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>';
Sortira:
1230
1235
1230
1169
Il y a beaucoup de réponses à cette question, probablement toutes vous donneront la réponse que vous recherchez. Mais comme le mentionne @TallGreenTree, 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. Pour résoudre cela, ajoutez +5
à votre nombre 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 cela arrondit uniquement les fractions et non les nombres entiers.
Si vous voulez arrondir au plus proche 100
, vous devez utiliser +50
.
div par 10 puis utiliser ceil puis mult par 10
Essayer
round(23, -1);
On peut "tricher" via round avec
$rounded = round($roundee / 10) * 10;
On peut aussi é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) qui round
prend désormais en charge la précision "négative", donc vous pouvez 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;
}
Je voulais arrondir au numéro suivant à la place des chiffres les plus grands (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;
}
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
Cela peut être facilement accompli en utilisant la fonction PHP ' fmod '. Le code ci-dessous est spécifique à 10 mais vous pouvez le changer en n'importe quel nombre.
$num=97;
$r=fmod($num,10);
$r=10-$r;
$r=$num+$r;
return $r;
SORTIE: 100
Essayez ceci ...... passez le nombre à arrondir et il arrondira au dixième près.
rond ($ num, 1);