TP_Thread_Arrondi

Conception de logiciels Intranet : patrons et canevas

Modérateurs : Douin, graffion

StevenW
Messages : 14
Inscription : 11 mars 2017 8:29

TP_Thread_Arrondi

Message par StevenW » 11 mars 2017 9:02

Bonjour,

Pour l'arrondi à un chiffre après la décimale de la valeur issue du capteur j'utilise la classe BigDecimal et voici le code :

Code : Tout sélectionner

String valeur = (String) stringTokenizer.nextElement();
float resultat = Float.parseFloat(valeur);
BigDecimal bd = new BigDecimal(Float.toString(resultat));
bd = bd.setScale(1, BigDecimal.ROUND_UP);
resultat = bd.floatValue();
Le paramètre d'arrondi de la fonction setScale possède huit variantes:
ROUND_CEILING (4 échecs)
ROUND_UP (4 échecs)
ROUND_HALF_UP (2 échecs)
ROUND_DOWN (non testé)
ROUND_FLOOR (non testé)
ROUND_HALF_DOWN (non testé)
ROUND_HALF_EVEN (non testé)
ROUND_UNNECESSARY (non_testé).

J'en suis déjà à quatre tentatives et je ne pourrai pas tous les tester.
Donc déjà est ce la bonne méthode pour effectué l'arrondi? Si oui quel paramètre pensez vous être le bon?

Merci pour votre aide.

Cordialement,

Steven

TSwank
Messages : 8
Inscription : 05 juin 2014 11:03

Re: TP_Thread_Arrondi

Message par TSwank » 11 mars 2017 18:36

Bonjour,

J'ai la même erreur :
There was 1 failure: 1) test_bon_affichage2(question1): taux tronqué, au 1/10 ???
Mon code :

Code : Tout sélectionner

  public  float value() throws Exception{
    String req = this.request(), retStr = "";
    StringTokenizer st = new StringTokenizer(req, "=");
    while (st.hasMoreTokens())
      retStr = st.nextToken();
    BigDecimal bd = new BigDecimal(retStr);
    bd = bd.setScale(1, BigDecimal.ROUND_HALF_UP);
    return bd.floatValue();
  }
Je n'arrive pas à comprendre le problème.

Est-ce que quelqu'un a une idée?

Thomas

fcollet
Messages : 6
Inscription : 16 nov. 2016 11:14

Re: TP_Thread_Arrondi

Message par fcollet » 11 mars 2017 20:29

Bonjour,

Vous trouverez certainement votre bonheur en consultant le sujet du tp2 du NFP121

Frédéric

TSwank
Messages : 8
Inscription : 05 juin 2014 11:03

Re: TP_Thread_Arrondi

Message par TSwank » 11 mars 2017 20:53

Bonjour Frédéric,

Merci pour votre réponse.

Ce qui m'étonne c'est qu'en comparant la valeur obtenue avec la chaîne request, les arrondis ont l'air normaux...

Ci-dessous, quelques résultats:

Code : Tout sélectionner

# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=41.761654  ->  41.8
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=26.594019  ->  26.6
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=2.4867828  ->  2.5
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=47.256805  ->  47.3
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=84.873726  ->  84.9
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=44.66832  ->  44.7
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=70.15546  ->  70.2
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=29.27166  ->  29.3
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=8.469097  ->  8.5
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=30.829302  ->  30.8
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=37.182446  ->  37.2
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=79.214966  ->  79.2
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=36.299713  ->  36.3
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=97.82722  ->  97.8
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=92.65808  ->  92.7
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=71.70542  ->  71.7
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=67.96272  ->  68.0
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=41.92974  ->  41.9
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=85.36304  ->  85.4
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=59.06821  ->  59.1
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=98.54822  ->  98.5
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=47.878788  ->  47.9
# ibutton: DS2438; Adapter: DS9097U; Port: COM2;<br>1C0000000D536B26=27.349966  ->  27.3
Ou alors, est-ce qu'il faut utiliser une autre règle d'arrondis?

Thomas

StevenW
Messages : 14
Inscription : 11 mars 2017 8:29

Re: TP_Thread_Arrondi

Message par StevenW » 11 mars 2017 22:11

Bonjour,

Frédéric :
Merci pour l'info, j'ai regardé le Tp2 de NFP121, il n'y a malheureusement aucune référence au sujet de l'arrondi. Je pense que c'est dans autre Tp de NF121. Je vais voir.

Thomas :
J'ai essayé cette fonction de la classe Math mais j'ai trois échecs, pourtant elle arrondi bien au plus près du zéro ex: 32.67 -> 32.7

Code : Tout sélectionner

float temp = Float.parseFloat(String valeur);
float resultat = (float) Math.round(temp * 10f) / 10f;
Continuons à chercher mais je n'ai plus qu'une seule tentative, donc s'il t'en reste tu peux essayer autre chose, moi je vais rester sur le paramètre BigDecimal.ROUND_HALF_UP.

Bonne chance,

Steven.

StevenW
Messages : 14
Inscription : 11 mars 2017 8:29

Re: TP_Thread_Arrondi

Message par StevenW » 11 mars 2017 23:48

Rebonjour,

Frédéric :
Mea culpa, la réponse est bien dans l'énonçé du Tp2 de NFP121, en plus je l'avais fait l'année dernière. Je finis avec 4 échecs en perdant trop de temps sur le net à trouver la formule magique, au lieu de bien lire l'énonçé, trop déçu.

Thomas :
J'espère que tu as trouvé la formule.

Steven

TSwank
Messages : 8
Inscription : 05 juin 2014 11:03

Re: TP_Thread_Arrondi

Message par TSwank » 12 mars 2017 2:00

J'avoue ne pas avoir trouvé la formule permettant de résoudre le problème dans l'énoncé.
Et il ne me reste qu'un essai, donc je préfère en rester là.

Merci pour le tuyau en tout cas !

Fujimoto
Messages : 9
Inscription : 02 oct. 2016 15:02

Re: TP_Thread_Arrondi

Message par Fujimoto » 12 mars 2017 18:00

Bonjour,

pour ne garder qu'un seul chiffre après la virgule, j'ai multiplié la valeur par 10 puis je le cast en int pour perdre les autres chiffres puis je le re-cast en float et je divise par 10. Les test JNews ont été ok.

((float)((int)(value*10)))/10

TSwank
Messages : 8
Inscription : 05 juin 2014 11:03

Re: TP_Thread_Arrondi

Message par TSwank » 13 mars 2017 22:03

Fujimoto a écrit :
12 mars 2017 18:00
Bonjour,

pour ne garder qu'un seul chiffre après la virgule, j'ai multiplié la valeur par 10 puis je le cast en int pour perdre les autres chiffres puis je le re-cast en float et je divise par 10. Les test JNews ont été ok.

((float)((int)(value*10)))/10
Bonjour Fujimoto,

Tu me sauve la mise !

Merci pour ton aide.

Thomas

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité