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

Outils PostgreSQL Discussion :

pgadmin affichage double précision


Sujet :

Outils PostgreSQL

  1. #1
    Membre averti
    Homme Profil pro
    Informaticien
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Informaticien
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Points : 357
    Points
    357
    Par défaut pgadmin affichage double précision
    bonjour à tous,

    je suis sous postgresql 9.1 avec pgadmin 1.14.3

    je rencontre sous pgadmin, un problème d'affichage des valeurs en double précision
    par exemple pour une valeur stockée en base 30.39993, pgadmin m'affiche 30.4

    peut-on le forcer à afficher la vrai valeur ?

    (note: l'utilitaire console psql effectue aussi l'arrondi )


    merci pour votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    http://www.postgresql.org/docs/9.1/i...e-numeric.html

    double et double précision sont des types numéric inexact.

    Etes-vous sur qu'en base il y a bien ce nombre exactement d'enregistré ?
    (en faisant une multiplication par 100 par exemple ...)

  3. #3
    Membre averti
    Homme Profil pro
    Informaticien
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Informaticien
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Points : 357
    Points
    357
    Par défaut
    oui, j'ai fait un pg_dump de la base et j'ai bien le nombre enregistré en 30.39993

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    A combien est votre paramètre de session : extra_float_digits ? -10 ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    show extra_float_digits
    Essayez de le mettre à 0 si c'est le cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    set extra_float_digits = 0;

  5. #5
    Membre averti
    Homme Profil pro
    Informaticien
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Informaticien
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Points : 357
    Points
    357
    Par défaut
    extra_float_digits me retourne 0.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Déjà comment reproduire le problème?
    En effet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create table testdouble(a double precision);
    insert into a values(30.39993);
    insert into testdouble values(30.39993);
    select * from testdouble ;
    Résultat
        a     
    ----------
     30.39993
    (1 row)
    
    et non pas 30.4

  7. #7
    Membre averti
    Homme Profil pro
    Informaticien
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Informaticien
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Points : 357
    Points
    357
    Par défaut
    en fait le "problème" semble se situer au niveau du stockage.
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into test values (30.4)
    voici ce que me donne pg_dump
    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
     
    CREATE TABLE test (
        test double precision
    );
     
     
    ALTER TABLE public.test OWNER TO postgres;
     
    --
    -- Data for Name: test; Type: TABLE DATA; Schema: public; Owner: postgres
    --
     
    COPY test (test) FROM stdin;
    30.3999999999999986
    \.
    j'accède à ces données via jdbc et contrairement à pgadmin le driver java me renvoi 30.999999... et non 30.4

    je n'avais jamais remarqué cela jusqu'au changement de version de jdbc

    Peut être est ce un fonctionnement normal mais neamoins curieux

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Avez-vous lu l'article de la doc que je vous ai linké plus haut ..?

  9. #9
    Membre averti
    Homme Profil pro
    Informaticien
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Informaticien
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Points : 357
    Points
    357
    Par défaut
    oui et je vous en remercie.

    je l'ai aussi lu en français (on ne sait jamais)
    https://postgresql.developpez.com/cours/

    j'ai bien compris que le stockage pouvait être approximatif.

    mais je suis surpris de tant de "dérive" sur une seule décimale.
    pourquoi se compliquer la vie ?

    comme je l'ai dis précédemment c'est le changement de driver jdbc qui ma révélé cette curiosité.
    je vais donc revoir le type de champ qui stocke ces données.

    Merci pour tout !

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Citation Envoyé par rupteur Voir le message
    j'ai bien compris que le stockage pouvait être approximatif.

    mais je suis surpris de tant de "dérive" sur une seule décimale.
    pourquoi se compliquer la vie ?
    C'est parce que le nombre est stocké en binaire flottant et pas en décimal flottant.
    En binaire il y a problablement une infinité de chiffres après la virgule sur ce nombre 30.4
    Mais si c'était 30.5 par exemple il n'y aurait aucune "dérive".

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

Discussions similaires

  1. Fichiers data double précision et affichage en real
    Par feynman dans le forum Fortran
    Réponses: 6
    Dernier message: 13/10/2008, 11h15
  2. [Forth] Entrée double précision ?
    Par chemugle dans le forum Autres langages
    Réponses: 1
    Dernier message: 09/01/2007, 00h12
  3. Simple et double Précision en C
    Par r-o-m-z dans le forum C
    Réponses: 4
    Dernier message: 22/10/2006, 13h16
  4. [Débutant] Formulaire affichage double
    Par hudsson dans le forum Access
    Réponses: 8
    Dernier message: 21/03/2006, 18h42
  5. Réponses: 3
    Dernier message: 12/11/2005, 07h32

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