J'ai besoin d'arrondir une moyenne à 0,5 près
Bonjour à tous les 2,
Si je peux me permettre, je voudrais vous soumettre un code que je viens de développer en cherchant quelque chose de similaire mais un peu plus précis.
Je m'explique :
Tu as besoin d'arrondir une moyenne à 0,5 près. J'ai fais quelque chose (peut-être pas assez propre pour certains, mais n'hésitez pas à améliorer le code) qui permet d'arrondir une valeur à 0,05 / 0,10 / 0,20 / 0,50 près ou suppérieur.
<?php
// On définie une valeur à arrondir (ex: 11.824)
$val = 11.824;
echo "valeur originale : ".$val."
";
// On arrondie la valeur de manière à obtenir une valeur arrondie à 2 décimales
$valRound = round($val*100)/100;
$valCeil = ceil($val*100)/100;
echo "conversion a 2 décimales pres : ".$valRound."
";
echo "conversion a 2 décimales supp : ".$valCeil."
";
// On récupère les décimales pour les traiter selon qu'il s'agit d'un arrondi à la valeur la plus proche ou suppérieure
list($entier, $decRound) = split('[.]', $valRound);
echo "travail sur les decimales (pres) : ".$decRound."
";
list($entier, $decCeil) = split('[.]', $valCeil);
echo "travail sur les decimales (supp) : ".$decCeil."
";
/**
* fonction d'arrondi
*
* @param $value Il s'agit de la valeur à arrondir
* @param $arrondi Il s'agit du niveau d'arrondi (0,05 / 0,10 / 0,20 / ...) --> Valeur utilisées : 5 / 10 / 20 / 50 (je n'ai pas testé d'autres valeurs)
* @param $roundType Il s'agit du type d'arrondi (arrondi à la valeur la plus proche ou à la valeur suppérieure) - Valeurs possibles : "round" / "ceil"
* @param $precision 1(par défaut) pour les dizaines, 2 pour les centaines, 3 pour millier - En utilisant la valeur "1" c'est good!
* @return unknown_type Retourne la valeur de la décimale une fois arrondie
*/
function decRound($value, $arrondi, $roundType, $precision = 1)
{
$p = pow ($arrondi, $precision);
return $roundType ($value / $p) * $p;
}
$dec5a = decRound ($decRound, 5, 'round', 1);
$valeur = $entier+($dec5a/100);
echo "Arrondi a 0,05 pres : ".$dec5a." ---> ".$valeur."
";
$dec5b = decRound ($decCeil, 5, 'ceil', 1);
$valeur = $entier+($dec5b/100);
echo "Arrondi a 0,05 Sup : ".$dec5b." ---> ".$valeur."
";
$dec10a = decRound ($decRound, 10, 'round', 1);
$valeur = $entier+($dec10a/100);
echo "Arrondi a 0,10 pres : ".$dec10a." ---> ".$valeur."
";
$dec10b = decRound ($decCeil, 10, 'ceil', 1);
$valeur = $entier+($dec10b/100);
echo "Arrondi a 0,10 Sup : ".$dec10b." ---> ".$valeur."
";
$dec20a = decRound ($decRound, 20, 'round', 1);
$valeur = $entier+($dec20a/100);
echo "Arrondi a 0,20 pres : ".$dec20a." ---> ".$valeur."
";
$dec20b = decRound ($decCeil, 20, 'ceil', 1);
$valeur = $entier+($dec20b/100);
echo "Arrondi a 0,20 Sup : ".$dec20b." ---> ".$valeur."
";
$dec50a = decRound ($decRound, 50, 'round', 1);
$valeur = $entier+($dec50a/100);
echo "Arrondi a 0,50 pres : ".$dec50a." ---> ".$valeur."
";
$dec50b = decRound ($decCeil, 50, 'ceil', 1);
$valeur = $entier+($dec50a/100);
echo "Arrondi a 0,50 Sup : ".$dec50a." ---> ".$valeur."
";
?>
Résultat :
valeur originale : 11.824
conversion a 2 décimales pres : 11.82
conversion a 2 décimales supp : 11.83
travail sur les decimales (pres) : 82
travail sur les decimales (supp) : 83
Arrondi a 0,05 pres : 80 ---> 11.8
Arrondi a 0,05 Sup : 85 ---> 11.85
Arrondi a 0,10 pres : 80 ---> 11.8
Arrondi a 0,10 Sup : 90 ---> 11.9
Arrondi a 0,20 pres : 80 ---> 11.8
Arrondi a 0,20 Sup : 100 ---> 12
Arrondi a 0,50 pres : 100 ---> 12
Arrondi a 0,50 Sup : 100 ---> 12
J'espère que mon post n'est pas trop long et qu'il pourra servir à bon nombre qui comme moi cherchait une plus grande précision dans les arrondis.
Merci.
a+
Romain
Un nain a beau se tenir sur une montagne, il n'en est pas plus grand pour celà
(Sénèque)