Arrondir a 0,5 près [Résolu]

Signaler
Messages postés
19
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
18 juillet 2008
-
rdepin
Messages postés
1
Date d'inscription
mercredi 12 août 2009
Statut
Membre
Dernière intervention
12 août 2009
-
Bonjour, je met en place un système de notation de produit et j'ai besoin d'arrondir une moyenne à 0,5 près.
exemple:
moyenne = 1,435
moyenne arrondie = 1,5

Si quelqu'un connait un moyen pour le faire ^^
Merci d'avance ++

5 réponses

Messages postés
681
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
21 août 2014

ah ^^ j'ai compris maintenan

$nombre=1.17;

$arrondi = round($nombre*2)/2;


enfin je crois que ça devais faire ce dont tu a besoin

Developpement Web Yannic GraphiX | Mon CMS yArt et sa démo
Messages postés
1
Date d'inscription
mercredi 12 août 2009
Statut
Membre
Dernière intervention
12 août 2009
1
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)
Messages postés
681
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
21 août 2014

Bonjour bonjour,

....la documantation de php t'aurait évité de poser la question...

-> http://fr.php.net/manual/fr/function.round.php <-

echo round(1.435, 1);  // 1.5


Bonne journée...

Developpement Web Yannic GraphiX | Mon CMS yArt et sa démo
Messages postés
19
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
18 juillet 2008

Je me suis déjà renseigner sur cette fonction mais le problème c'est que je cherche à ce que
moyenne = 1,17
moyenne arrondie = 1
et
moyenne = 1,278
moyenne arrondie = 1,5
Messages postés
19
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
18 juillet 2008

c'est exactement ce qu'il me fallait^^
j'ai vraiment plus de tête lol c'était tout bête.

Merci ++