Bonjour à tous,
Je cherche une méthode dans Pharo pour fixer le nombre de chiffres après la virgule. Suite à une division. j'ai besoin que mon résultat soit arrondi et retourné avec seulement deux décimales. ça me semblait simple mais je ne trouve rien qui fasse l'affaire. une idée ? Merci d'avance Olivier ;-) www.auverlot.fr |
Salut Olivier, voici une solution: (4.567786 asScaledDecimal: 2) --> 4.57 Attention, cette méthode arrondie bien évidement... Si tu souhaite obtenir un résultat similaire sans arrondir, tu peux utiliser ceci: (4.567786 asString) truncate: 4 --> 4.56 J'espère avoir réussi à t'aider. Bonne continuation... -- Sébastien AUDIER ObjectFusion S.A.R.L. Applications web, consulting, design http://www.objectfusion.fr |
Merci Sébastien pour cette réponse rapide.
J'ai testé la première méthode que tu me propose car j'ai besoin en effet d'arrondir le chiffre. Avec Pharo (1.1.1), la méthode asScaledDecimal fonctionne mais elle me retourne la valeur 4.57s2 (que signifie s2 ?) Plus étrange encore, dans le workspace, le code suivant ne me retourne pas 4.67 mais 4.667786 (???) | v | v := 4.567786 asScaledDecimal: 2. Transcript show: (v + 0.1) Je me sens un peu perdu... Olivier ;-) www.auverlot.fr
|
Je ne suis pas un expert en arithmétic, mais le "s2" est dû à l'object de la classe ScaleDecimal, une solution temporaire mais pas très élégante à mes yeux: (un mix des deux) | v | v := ((4.567786 asScaledDecimal: 2) asString truncate: 4) asNumber. Transcript show: (v + 0.1) ps; je maintiens que cette solution n'est pas très élégante... J'espère que les autres viendront en proposer une meilleur. -- Sébastien AUDIER ObjectFusion S.A.R.L. Applications web, consulting, design http://www.objectfusion.fr |
In reply to this post by Olivier Auverlot
<base href="x-msg://9/">Bonsoir,
Juste pour l'affichage: 1.22222 printShowingDecimalPlaces: 2 '1.22' Sinon, pour arrondir: 1.22222 roundDownTo: 0.01 -> 1.22 1.22222 roundUpTo: 0.01 - > 1.23 Bon we ;) Cédrick Le 25 févr. 2011 à 22:36, Olivier Auverlot a écrit :
|
In reply to this post by Olivier Auverlot
> Je cherche une méthode dans Pharo pour fixer le nombre de chiffres après la
> virgule. Suite à une division. j'ai besoin que mon résultat soit arrondi et > retourné avec seulement deux décimales. > Peut-être `printShowingDecimalPlaces: 2` Je viens de remarqué cette méthode dans le protocole de "Number". Elle semble convenir, mais je peux me tromper. |
In reply to this post by Olivier Auverlot
Le 25/02/2011 23:12, Olivier Auverlot a écrit :
Merci Sébastien pour cette réponse rapide. Bonjour, Pour résumer: 1.0 est un Float 1.0000001d est un Double. 1.01s est un FixedPoint (ScaledDecimal ici, je suppose). Un FixedPoint est une Fraction accompagnée d'un nombre de chiffres significatifs après la virgule, utilisé pour la lecture du nombre. Les calculs en FixedPoint sont exacts (les banques aiment cela). Quand on additionne les nombres entre eux, il y a des conversions implicites. Le flottant 'mange' les bonnes propriétés des FixedPoint. Ce qui explique le résultat obtenu dans vos calculs. Mettre un 's' à la fin de l'opérande flottant et cela va s'arranger. Petits exemples, en direct de mon workspace (VW).. Bien cordialement B.Pottier www.auverlot.fr arith.st (389 bytes) Download Attachment |
Merci à tous pour votre aide :-)
Olivier
Le 26 févr. 2011 à 11:33, Pottier Bernard a écrit :
|
Free forum by Nabble | Edit this page |