Bonjour à tous,
J'étais en train de développer une application tranquillement en Java (et oui on a réussit à me persuader que Java c'est bien), quand j'ai remarqué que Java me faisait des arrondis bizarre...
Je m'explique, voici ce que faisais mon programme :
- Je rentrais un nombre dans un String
- Je le convertissais en float
- Je multipliais le résultat par cent
- Je récupérais la partie entière du résultat
Par exemple : 1204.2141 -> 120421
Vous allez me dire où est le problème:
Est bien voila, j'avais remarqué que dans certains cas, mon programme se trompait d'un centième. Je me suis dit au début que je devais me tromper et pas faire attention... Mais en fait non il y a effectivement un bug ou une erreur tout dépend de comment on prend le problèmele tout est d'être au courant ^^
Voici un exemple de code :
Le résultat est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 package test; public class test { public static void main(String[] args) { float temp = 154.18f; System.out.println(temp); temp = temp*100; System.out.println(temp); } }
Non ce n'est pas une blague... Tous les chiffres compris entre 127 et 164 se ayant 18 comme chiffre après la virgule ont sette propriété
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 154.18 15417.999
Je sais qu'il peut y avoir des erreurs d'arrondis sur le codage des chiffres, mais c'est tout de même gros la non:
D'ailleurs, on peut voir tout de suite que le problème vient de cette erreur car le programme suivant :
Renvoie ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 package test; public class test { public static void main(String[] args) { double temp = 154.18f; System.out.println(temp); } }
Propagation d'erreur trop important pour le float ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 154.17999267578125:
Désolé d'avoir été si long et désolé si je me suis trompé de rubrique ^^
Partager