Orientation du regard, mouvement des mains, balancement du corps... Autant d'attitudes et gestes anodins qui traduisent votre état d'esprit. Décryptage. Conseil
management | social media | marketing | seo | web app development | performance management | hr management Autant de thèmes que j'aborde dans le cadre de mes missions de consultance et que je souhaite développer et partager avec vous sur ce blog ! N'hésitez pas à me suivre, à me lire, à me commenter mais aussi à me contacter si vous souhaitez discuter d'un de ces thèmes pour votre business !
lundi 5 mars 2012
dimanche 4 mars 2012
Différence entre ceil() et round()
Basique comme différence mais j'ai du faire à un "bug" (ou plutôt une incohérence) tout bête il y a quelques jours dont la correction fut simplement de choisir l'un plutôt que l'autre.
Je plante le décors : un fichier Excel servant de feuille de calcul pour établir des devis dans le domaine de la construction. Dans cette feuille de calcul, en plus de retourner un prix final, un nombre de palettes doit être calculé pour déterminer un forfait de livraison.
Cette feuille de calcul devait être traduite en une application web permettant aux clients la même flexibilité online et, bien entendu, de recevoir le même résultat. Problème : au final, dans certains cas, une petite différence au niveau du nombre de palettes était constatée. Persuadé que cela provenait d'une erreur d'arrondi, j'ai regardé plus en détail et bingo, l'utilisation de round() expliquait ce problème.
Petite explication. La formule Excel faisait un
=ROUNDUP(K21/L21,0)En Excel, ROUNDUP arrondit au chiffre supérieur. Au départ, dans le code PHP, ceci avait été transformé en
$palletsQty = round($pallets, 0, PHP_ROUND_HALF_UP);Cet appel arrondi effectivement au chiffre supérieur ... mais pas dans tous les cas :-)
Exemple :
echo round(4.5, 0, PHP_ROUND_HALF_UP) . '<br />';Le premier exemple va retourner 5, là où le second exemple donnera 4. Bien que la constante PHP_ROUND_HALF_UP (arrondi supérieur) soit présente, les décimales strictement inférieures à 5 feront que l'arrondi se fera vers le bas.
echo round(4.4, 0, PHP_ROUND_HALF_UP) . '<br />';
La solution est donc toute simple : remplacer l'utilisation de round par l'utilisation de ceil qui retourne l'entier supérieur du nombre fourni.
Inscription à :
Articles (Atom)