Si, ça risque... mais ça donne le bon résultat à tous les coups. De plus, l'arrondi est correctement calculé.
Ex:
foreach my $x (10.04, 11111111111111.04) { my $x1 = int($x*100)/100; my $x2 = sprintf("%.2f", $x); print "$x $x1 $x2n"; }
(Le résultat peut dépendre de la précision de votre machine.)
C'est donc la bonne méthode pour de l'affichage. Maintenant si c'est pour du calcul, il vaudrait mieux spécifier la méthode d'arrondi choisie (voire même calculer directement en entier, l'unité interne représentant alors les centièmes externes).
J'avais oublié que undef %truc; et %truc = (); ont le même effet.
Je préfère la seconde écriture car elle a le mérite d'être utilisable pour toutes les initialisations de tables de hachages (qu'elles soient vides ou non).
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>
À (at) Wed, 16 Feb 2005 11:51:50 +0100,
Mathieu Arnold <news+free@mat.cc> écrivait (wrote):
Si, ça risque... mais ça donne le bon résultat à tous les coups. De plus,
l'arrondi est correctement calculé.
Ex:
foreach my $x (10.04, 11111111111111.04) {
my $x1 = int($x*100)/100;
my $x2 = sprintf("%.2f", $x);
print "$x $x1 $x2n";
}
(Le résultat peut dépendre de la précision de votre machine.)
C'est donc la bonne méthode pour de l'affichage. Maintenant si c'est pour du
calcul, il vaudrait mieux spécifier la méthode d'arrondi choisie (voire même
calculer directement en entier, l'unité interne représentant alors les
centièmes externes).
J'avais oublié que undef %truc; et %truc = (); ont le même effet.
Je préfère la seconde écriture car elle a le mérite d'être utilisable pour
toutes les initialisations de tables de hachages (qu'elles soient vides ou
non).
--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>
Si, ça risque... mais ça donne le bon résultat à tous les coups. De plus, l'arrondi est correctement calculé.
Ex:
foreach my $x (10.04, 11111111111111.04) { my $x1 = int($x*100)/100; my $x2 = sprintf("%.2f", $x); print "$x $x1 $x2n"; }
(Le résultat peut dépendre de la précision de votre machine.)
C'est donc la bonne méthode pour de l'affichage. Maintenant si c'est pour du calcul, il vaudrait mieux spécifier la méthode d'arrondi choisie (voire même calculer directement en entier, l'unité interne représentant alors les centièmes externes).
J'avais oublié que undef %truc; et %truc = (); ont le même effet.
Je préfère la seconde écriture car elle a le mérite d'être utilisable pour toutes les initialisations de tables de hachages (qu'elles soient vides ou non).
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>
Si, ça risque... mais ça donne le bon résultat à tous les coups. De plus, l'arrondi est correctement calculé.
Euh, c'est la troncature, ca non? perso, j'aurais dit:
$nombre = int($nombre * 100 + .5) / 100;
La troncature est une méthode d'arrondi (et c'est effectivement ce que fait la première méthode: on arrondit vers l'entier inférieur).
Votre proposition est une seconde méthode d'arrondi. Mais il existe d'autres méthodes d'arrondi. 'sprintf' utilise sa propre méthode (en raisonnant sur la représentation décimale de la valeur).
Par exemple, en supposant qu'on cherche un entier, comment faut-il arrondir 2.49 ? Certains proposent cela :
2.49 -> 2.5 -> 3 (en fait, on fait un arrondi décimale par décimale).
On peut aussi arrondir à l'entier supérieur.
En fait, la méthode choisie dépend du contexte. Dans un contexte financier/fiscal, c'est la loi qui fixe la méthode. Par exemple pour le calcul de la TVA ou pour les conversions monétaires...
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>
À (at) 16 Feb 2005 13:42:15 GMT,
Isammoc <Isammoc.jeux(no-spam)@free.fr> écrivait (wrote):
Si, ça risque... mais ça donne le bon résultat à tous les coups. De
plus, l'arrondi est correctement calculé.
Euh, c'est la troncature, ca non?
perso, j'aurais dit:
$nombre = int($nombre * 100 + .5) / 100;
La troncature est une méthode d'arrondi (et c'est effectivement ce que fait la
première méthode: on arrondit vers l'entier inférieur).
Votre proposition est une seconde méthode d'arrondi. Mais il existe d'autres
méthodes d'arrondi. 'sprintf' utilise sa propre méthode (en raisonnant sur la
représentation décimale de la valeur).
Par exemple, en supposant qu'on cherche un entier, comment faut-il arrondir
2.49 ? Certains proposent cela :
2.49 -> 2.5 -> 3 (en fait, on fait un arrondi décimale par décimale).
On peut aussi arrondir à l'entier supérieur.
En fait, la méthode choisie dépend du contexte. Dans un contexte
financier/fiscal, c'est la loi qui fixe la méthode. Par exemple pour le calcul
de la TVA ou pour les conversions monétaires...
--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>
Si, ça risque... mais ça donne le bon résultat à tous les coups. De plus, l'arrondi est correctement calculé.
Euh, c'est la troncature, ca non? perso, j'aurais dit:
$nombre = int($nombre * 100 + .5) / 100;
La troncature est une méthode d'arrondi (et c'est effectivement ce que fait la première méthode: on arrondit vers l'entier inférieur).
Votre proposition est une seconde méthode d'arrondi. Mais il existe d'autres méthodes d'arrondi. 'sprintf' utilise sa propre méthode (en raisonnant sur la représentation décimale de la valeur).
Par exemple, en supposant qu'on cherche un entier, comment faut-il arrondir 2.49 ? Certains proposent cela :
2.49 -> 2.5 -> 3 (en fait, on fait un arrondi décimale par décimale).
On peut aussi arrondir à l'entier supérieur.
En fait, la méthode choisie dépend du contexte. Dans un contexte financier/fiscal, c'est la loi qui fixe la méthode. Par exemple pour le calcul de la TVA ou pour les conversions monétaires...
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>