Bonjour,
j'essaie de comprendre un problème concernant le type float, j'ai le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 String s = "738290.76" ; Float f = Float.valueOf(s) ; Double d = Double.parseDouble(s); System.out.println("s="+s+" , f="+f+" , d="+d); -->s=738290.76 , f=738290.75 , d=738290.76 String s2 = "160944.36"; Float f2 = Float.valueOf(s2) ; Double d2 = Double.parseDouble(s2); System.out.println("s="+s2+" , f="+f2+" , d="+d2); --> s=160944.36 , f=160944.36 , d=160944.36
mon problème concerne la perte de la précision sur le type float le nombre 738290.76 se transforme en 738290.75 avec une conversion de type, mais le type double préserve sa précision.
ce n'est pas forcément un problème de conversion car quand je lis un champ dans un fichier délimité déclaré en float, j'ai aussi des fois cette perte (c'est aléatoire). c'est peut être lié à l'encodage du fichier (si je déclare un fichier comme UTF-8 alors que c'est de l'ASCII peut être que ce n'est pas encodés de la même manière vu le nombre d'octets utilisés .....) ?
pouvez vous m'orienter vers les sujets qui traite ceci car quand je cherche une réponse à ce problème je trouve des réponses qui parlent de comment convertir en float, ou comment arrondir un float.
je suis également tombé sur un article qui dit que les ordinateurs ne savent pas traiter les nombres réels et que le résultat des float (a*b) * c peut être différent de a*(b*c) :
http://www.lactamme.polytechnique.fr...rs.01.Fra.html
voilà donc dans quelle mesure puis je garantir un résultat fiable et fidèle à la source ? le type double a t il aussi cette limite ? sachant que je travaille sur un projet comptable et je ne peux pas me permettre la perte du moindre centime, merci.
Partager