Quelle boucle ?
Le premier problème c'est
1 2
| String msg= "Moins de 0,5 g sont autorisés";
return res= Double.valueOf(msg); |
Parce que
Double.valueOf("Moins de 0,5 g sont autorisés");
ça va coincer.
Mon avis perso ça serait d'afficher le message et renvoyer la valeur plancher, donc
1 2
| System.out.println("Les valeurs de moins de " +minValue+ " g ne sont pas autorisées");
res= minValue; |
Deuxième problème, dans la partie moins de 10g :
Tu n'affecte jamais ta valeur de retour res, mais une variable value non utilisée.
Troisième problème, pour être au décigramme près, il faut plutôt
bd= bd.setScale(2, RoundingMode.UP);
ce qui donne au final :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| private Double nearByValueEur (Double value, Double minValue){
Double res = 0.0;
if (value >=10){
res= (double) Math.round(value);
}
else if (value >minValue && value <10){
BigDecimal bd = new BigDecimal(value);
bd= bd.setScale(1, RoundingMode.UP);
res = bd.doubleValue();
}
else if (value == minValue){
res=minValue;
}
else{
System.out.println("Les valeurs de moins de " + minValue + " g ne sont pas autorisées");
res= minValue;
}
return res;
} |
et :
new dbl 12.49 =12.0
new dbl 12.50 =13.0
new dbl 2.45 =2.5
Les valeurs de moins de 0.5 g ne sont pas autorisées
new dbl 0.25 =0.5
NB : plutôt que
bd= bd.setScale(1, RoundingMode.UP);
, la méthode HALF_UP donne des résultats plus exacts :
bd= bd.setScale(1, RoundingMode.HALF_UP);
new dbl 2.45 =2.5
new dbl 2.44 =2.4
new dbl 2.50 =2.5
et
1 2 3
| else if (value == minValue){
res=minValue;
} |
serait avantageusement remplacé par un >= dans la condition d'avant.
Enfin dans le même ordre d'idée, l'arrondi de 12.49 ou 12.15 en 12.0 n'est pas bon non plus, merci round...
Partager