J'ai une classe tournant gr=E2ce a Junit qui me permet de tester un
ensemble de valeur d'arrondi.
On lui donne des valeurs en entr=E9e, on =E9crit les valeurs en sortie
que l'on attend, on lance JUnit et on esp=E8re que tous nos tests
fonctionnent. Mais l=E0 c'est pas le cas.
Je ne veut pas de l'arrondi standart de Java mais un autre style
d'arrondi.
J'ai bien une solution d=E9j=E0 mise en place mais elle n'est pas s=FBre
du tout et souvent je rencontre de nouveaux cas non g=E9r=E9.
Ainsi j'aimerait bien avoir un truc plus simple.
Sur mon jeu de test actuel en utilisant des m=E9thodes simples, j'ai
quand m=EAme trois erreurs.
Voici les erreurs :
Erreur sur 142.8685 , on attendait 142,869 et on a eu 142,868 !
Erreur sur 4.1234567885 , on attendait 4,123456789 et on a eu
4,123456788 !
Erreur sur -142.8685 , on attendait -142,869 et on a eu -142,868 !
Mes autres tests sont Ok.
Le pb viendrait du fait que l'arrondi 'normal' serait que lorsqu'on a
0=2E5 =E0 la fin d'un nombre on arrondisse au dessus alors que moi je
voudrais un arrondi au dessus.
Voici l'ensemble de ma classe qui suit.
Seule la fonction 'getFormattedValue' de fin du fichier est =E0
modifier.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Christophe Tela
Christophe Rinaldi wrote:
J'ai une classe tournant grâce a Junit qui me permet de tester un ensemble de valeur d'arrondi. On lui donne des valeurs en entrée, on écrit les valeurs en sortie que l'on attend, on lance JUnit et on espère que tous nos tests fonctionnent. Mais là c'est pas le cas.
Je ne veut pas de l'arrondi standart de Java mais un autre style d'arrondi. As-tu regardé du côté de BigDecimal ? Cette classe permet de choisir parmi
de nombreuses méthodes d'arrondi...
Christophe Rinaldi wrote:
J'ai une classe tournant grâce a Junit qui me permet de tester un
ensemble de valeur d'arrondi.
On lui donne des valeurs en entrée, on écrit les valeurs en sortie
que l'on attend, on lance JUnit et on espère que tous nos tests
fonctionnent. Mais là c'est pas le cas.
Je ne veut pas de l'arrondi standart de Java mais un autre style
d'arrondi.
As-tu regardé du côté de BigDecimal ? Cette classe permet de choisir parmi
J'ai une classe tournant grâce a Junit qui me permet de tester un ensemble de valeur d'arrondi. On lui donne des valeurs en entrée, on écrit les valeurs en sortie que l'on attend, on lance JUnit et on espère que tous nos tests fonctionnent. Mais là c'est pas le cas.
Je ne veut pas de l'arrondi standart de Java mais un autre style d'arrondi. As-tu regardé du côté de BigDecimal ? Cette classe permet de choisir parmi
de nombreuses méthodes d'arrondi...
michaelm
La doc précise que pour DecimalFormat, le mode d'arrondi utilisé lorsqu'on a 0.5 est ROUND_HALF_EVEN (nombre pair le plus proche), qui n'est pas la méthode la plus habituelle, mais qui évite les effets de cumul d'erreurs. NumberFormat semble utiliser la même méthode d'arrondi, de même que la méthode Math.rint().
Pour choisir l'arrondi adapté à vos besoins, BigDecimal semble effectivement être le seul recours.
La doc précise que pour DecimalFormat, le mode d'arrondi utilisé
lorsqu'on a 0.5 est ROUND_HALF_EVEN (nombre pair le plus proche), qui
n'est pas la méthode la plus habituelle, mais qui évite les effets de
cumul d'erreurs. NumberFormat semble utiliser la même méthode
d'arrondi, de même que la méthode Math.rint().
Pour choisir l'arrondi adapté à vos besoins, BigDecimal semble
effectivement être le seul recours.
La doc précise que pour DecimalFormat, le mode d'arrondi utilisé lorsqu'on a 0.5 est ROUND_HALF_EVEN (nombre pair le plus proche), qui n'est pas la méthode la plus habituelle, mais qui évite les effets de cumul d'erreurs. NumberFormat semble utiliser la même méthode d'arrondi, de même que la méthode Math.rint().
Pour choisir l'arrondi adapté à vos besoins, BigDecimal semble effectivement être le seul recours.
Christophe Rinaldi
Merci, je vais me re-regarder du coté de BigDecimal. J'avais déjà essayer mais sans succès.
Si vous avez des pistes de recherches pour effectuer cet arrondi je suis preneur !!
Merci, je vais me re-regarder du coté de BigDecimal. J'avais déjà
essayer mais sans succès.
Si vous avez des pistes de recherches pour effectuer cet arrondi je
suis preneur !!
Merci, je vais me re-regarder du coté de BigDecimal. J'avais déjà essayer mais sans succès.
Si vous avez des pistes de recherches pour effectuer cet arrondi je suis preneur !!
Morphine
In article , "Christophe Rinaldi" wrote:
Merci, je vais me re-regarder du coté de BigDecimal. J'avais déjà essayer mais sans succès.
Si vous avez des pistes de recherches pour effectuer cet arrondi je suis preneur !!
Tu peux aussi faire un truc du genre : double retour = (Math.round(x*Math.pow(10,arrondi)) )/ (Math.pow(10,arrondi)); Tu peux améliorer en vérifiant si Math.round retourne une valeur égale à 0.5 près, pour dans ce cas ajouter 1 avant de rediviser.
A+
In article <1115711197.148942.56950@f14g2000cwb.googlegroups.com>,
"Christophe Rinaldi" <christophe.rinaldi@gmail.com> wrote:
Merci, je vais me re-regarder du coté de BigDecimal. J'avais déjà
essayer mais sans succès.
Si vous avez des pistes de recherches pour effectuer cet arrondi je
suis preneur !!
Tu peux aussi faire un truc du genre :
double retour = (Math.round(x*Math.pow(10,arrondi)) )/
(Math.pow(10,arrondi));
Tu peux améliorer en vérifiant si Math.round retourne une valeur égale à
0.5 près, pour dans ce cas ajouter 1 avant de rediviser.
Merci, je vais me re-regarder du coté de BigDecimal. J'avais déjà essayer mais sans succès.
Si vous avez des pistes de recherches pour effectuer cet arrondi je suis preneur !!
Tu peux aussi faire un truc du genre : double retour = (Math.round(x*Math.pow(10,arrondi)) )/ (Math.pow(10,arrondi)); Tu peux améliorer en vérifiant si Math.round retourne une valeur égale à 0.5 près, pour dans ce cas ajouter 1 avant de rediviser.
A+
Vincent Cantin
Les nombres decimaux binaires ne sont generalement pas affichables de maniere exacte avec peu de decimales. Les resultats que tu as recus, ainsi que ceux que tu as entres, ont ete d'abord convertis en decimales binaires. Je pense que c'est de la ou vient ton erreur entr ce que tu attends et ce que tu obtiens. Je pense que si tu fesais le test directement en decimales binaires, il se pourrait que tu n'ai pas d'erreurs.
Les nombres decimaux binaires ne sont generalement pas affichables de
maniere exacte avec peu de decimales. Les resultats que tu as recus, ainsi
que ceux que tu as entres, ont ete d'abord convertis en decimales binaires.
Je pense que c'est de la ou vient ton erreur entr ce que tu attends et ce
que tu obtiens. Je pense que si tu fesais le test directement en decimales
binaires, il se pourrait que tu n'ai pas d'erreurs.
Les nombres decimaux binaires ne sont generalement pas affichables de maniere exacte avec peu de decimales. Les resultats que tu as recus, ainsi que ceux que tu as entres, ont ete d'abord convertis en decimales binaires. Je pense que c'est de la ou vient ton erreur entr ce que tu attends et ce que tu obtiens. Je pense que si tu fesais le test directement en decimales binaires, il se pourrait que tu n'ai pas d'erreurs.