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

Messages postés
27
Date d'inscription
mercredi 19 janvier 2011
Dernière intervention
1 novembre 2018
- 31 oct. 2018 à 15:13 - Dernière réponse :
Messages postés
27
Date d'inscription
mercredi 19 janvier 2011
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 

Votre réponse

2 réponses

Messages postés
14299
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
16 novembre 2018
- 31 oct. 2018 à 18:41
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.
Messages postés
27
Date d'inscription
mercredi 19 janvier 2011
Dernière intervention
1 novembre 2018
- 1 nov. 2018 à 08:47
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.