Donnée au format double inexploitable [Résolu]

Messages postés
27
Date d'inscription
mercredi 19 janvier 2011
Statut
Membre
Dernière intervention
1 novembre 2018
- - Dernière réponse : salut67
Messages postés
27
Date d'inscription
mercredi 19 janvier 2011
Statut
Membre
Dernière intervention
1 novembre 2018
- 1 nov. 2018 à 08:47
Bonjour,
j'ai une base et des données que je ne gère pas, mais que j'utilise. Une colonne au format double me pose problème. Exemple :

db2 => select x from mytable
X
------------------------
  +1,00000000000000E-001
  +1,00000000000000E-001
  +1,00000000000000E-001
  +1,00000000000000E-001
  4 record(s) selected.

db2 => select case x when 0.1 then 'O' else 'N' end from mytable
1
-
N
N
O
O


Le SELECT me donne la même valeur 0.1 pour toutes les lignes. Mais le CASE indique le contraire. Que les valeurs ne soient pas "exactement " 0.1, je veux bien, mais le SELECT ne devrait-il pas alors afficher quelque chose du genre +9,999999999999E-002 ?

Je lis les données depuis un programme C qui semble alors tomber dans le même travers : une comparaison indique que seules 2 données sont à 0,1 mais quand je les affiche par printf('%g") elles sont toutes à 0,1 !

Du coup, je n'arrive pas à exploiter correctement cette donnée. Une explication ? Une idée de la manière de les lire ? Merci bien.

Jean-Claude
Afficher la suite 

1 réponse

Messages postés
14567
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 octobre 2019
136
0
Merci
Faire un test d'égalité sur est flottants est une grosse erreur.
Et il t'affiche 1.0E-1 car il arrondi le dernier chiffre à l'affichage.

Je te recommande plutôt de faire une fourchette genre >0.99999998 && <1.000000001

Pour l'affichage, c'est à toi de remettre en forme au moment de l'affichage.
salut67
Messages postés
27
Date d'inscription
mercredi 19 janvier 2011
Statut
Membre
Dernière intervention
1 novembre 2018
-
Merci de cette réponse rapide, c'est ce que je craignais.
Pas joli (désolé), pas pratique à maintenir (si j'ai d'autres bornes comme ce 0.1), mais je viens de la mettre en place, ça semble fonctionner.
Je prends.
Commenter la réponse de NHenry