IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Firebird Discussion :

Utilisation du type Double


Sujet :

SQL Firebird

  1. #1
    Membre régulier
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    228
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 228
    Points : 113
    Points
    113
    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 : 269
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 retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    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
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 6 378
    Points : 19 055
    Points
    19 055
    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 régulier
    Développeur informatique
    Inscrit en
    Décembre 2010
    Messages
    228
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 228
    Points : 113
    Points
    113
    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 sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 6 378
    Points : 19 055
    Points
    19 055
    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 Collection et Stream
    Réponses: 10
    Dernier message: 07/03/2008, 13h47
  2. utilisation du type Double
    Par Mobistar dans le forum Collection et Stream
    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