1. #1
    Membre du Club
    Développeur informatique
    Inscrit en
    décembre 2010
    Messages
    84
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : décembre 2010
    Messages : 84
    Points : 52
    Points
    52

    Par défaut Utilisation du type Double

    Bonjour,

    Ma table contient un champ de type Double qui contient des valeurs physiques (pression, température...) et je souhaite requêter sur ce champ.

    J'ai deux problèmes avec ce champ:
    • La lecture de ce champ me donne des approximations: 12,34 devient 12,34000157. Ce problème est classique, je m'en suis débarrassé avec une fonction.
      --> Quelle méthode plus propre je peux utiliser pour que 12,34 reste 12,34 à la lecture de cet enregistrement ?

    • Mes requêtes de recherche sur ce champ ne me renvoient rien. Ma requête:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      select * from info_machine_value where value_info_machine = 12,34
      Mes valeurs stockées (en tout cas celles affichées dans mon explorateur de BDD) correspondent à celles de ma requête.
      Nom : Double.png
Affichages : 41
Taille : 1,3 Ko
      Malgré cela mon résultat ne contient aucun enregistrement.


    Je pense que ces problèmes sont liées au type Double mais je ne suis pas sûr de m'en sortir avec un autre type.

    En parcourant le forum (ici) j'ai quelques éléments de réponses mais pas suffisants

    Merci pour vos retours.

    Lefju

    Delphi Berlin - FB 3.0

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    8 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 8 146
    Points : 18 649
    Points
    18 649
    Billets dans le blog
    4

    Par défaut

    Bonjour,
    Citation Envoyé par lefju cabro Voir le message
    [*]Mes requêtes de recherche sur ce champ ne me renvoient rien. Ma requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from info_machine_value where value_info_machine = 12,34
    Pour la requête, il ne faut pas oublier de "parler" anglo-saxon et donc le point décimal pas la virgule mais je pense qu'il s'agit d'une erreur de transcription
    pour avoir les valeurs 12.34 à 12.35 cette dernière non incluse la meilleure solution est, je pense, de passer par TRUNC

    CODE]select * from info_machine_value where TRUNC(value_info_machine,2) = 12.34[/CODE]

    cependant pour "l'affichage" TRUNC ne sera pas suffisant, select TRUNC(12.3589,2) from RDB$DATABASE donnera 12.3500 soit le nombre décimales de la valeur
    pour n'avoir "cosmétiquement parlant" que 2 chiffres après la virgule un CAST sera nécessaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select CAST(TRUNC(12.3589,2) AS NUMERIC(10,2)) from RDB$DATABASE
    donnera bien 12.35
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  3. #3
    Expert éminent Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    février 2011
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : février 2011
    Messages : 2 688
    Points : 8 160
    Points
    8 160

    Par défaut

    Salut à tous.

    Citation Envoyé par lefju cabro
    --> Quelle méthode plus propre je peux utiliser pour que 12,34 reste 12,34 à la lecture de cet enregistrement ?
    Pourquoi ne pas remplacer ce type "double" par "decimal" ?

    Citation Envoyé par lefju cabro
    La lecture de ce champ me donne des approximations: 12,34 devient 12,34000157.
    Oui, c'est normal, à cause de la façon de stocker en mémoire un nombre.
    Avec "decimal", si vous stockez 12,34 vous aurez 12,34 et pas autre chose.

    "double" ne sert que pour du calcul scientifique.
    Je ne comprends plus trop l'intérêt d'utiliser ce type aujourd'hui, qui pose quelques problèmes en ce qui concerne la précision du nombre stocké.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  4. #4
    Membre du Club
    Développeur informatique
    Inscrit en
    décembre 2010
    Messages
    84
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : décembre 2010
    Messages : 84
    Points : 52
    Points
    52

    Par défaut

    Bonjour SergioMaster et Artemus24,

    Merci pour vos conseils.

    J'ai testé les 2 méthodes, les 2 répondent parfaitement à ce que je souhaite faire. Par rapport à mon avancement de projet, il me sera plus facile et peut-être plus facilement repris de modifier le type de données "Double" et le remplacer par "Décimal".

    Lefju

  5. #5
    Expert éminent Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    février 2011
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : février 2011
    Messages : 2 688
    Points : 8 160
    Points
    8 160

    Par défaut

    Salut lefju cabro.

    Il vaut mieux passer la colonne du type DOUBLE au type DECIMAL, plutôt que de surcharger les requêtes avec l'astuce SergioMaster.
    C'est, selon moi, plus propre, et en terme de performance plus rapide.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utiliser un Decimal format avec un type double
    Par Mobistar dans le forum java.util
    Réponses: 10
    Dernier message: 07/03/2008, 13h47
  2. utilisation du type Double
    Par Mobistar dans le forum java.util
    Réponses: 12
    Dernier message: 23/10/2007, 12h49
  3. [HTML]Utilisation du type file
    Par Kuroro dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 23/12/2004, 16h12
  4. [LG]Convertir le type double en string
    Par @tom@ dans le forum Langage
    Réponses: 8
    Dernier message: 18/01/2004, 19h20
  5. utilisation du type DATE d'interbase
    Par dibak dans le forum InterBase
    Réponses: 4
    Dernier message: 05/01/2004, 15h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo