lundi 5 mars 2012

Les gestes qui vous trahissent

Les gestes qui vous trahissent:

Orientation du regard, mouvement des mains, balancement du corps... Autant d'attitudes et gestes anodins qui traduisent votre état d'esprit. Décryptage. Conseil



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 />';
echo round(4.4, 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.

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.


  • Documentation de round
  • Documentation de ceil