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
23sera 20et non 30car 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 modepour 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 roundprend 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);