Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 10 sur 10
  1. #1
    Membre actif
    Homme Profil pro Eric
    Informaticien
    Inscrit en
    juin 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric
    Localisation : France, Gers (Midi Pyrénées)

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

    Informations forums :
    Inscription : juin 2004
    Messages : 139
    Points : 164
    Points
    164

    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é Sénior
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    3 039
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 3 039
    Points : 4 617
    Points
    4 617

    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 actif
    Homme Profil pro Eric
    Informaticien
    Inscrit en
    juin 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric
    Localisation : France, Gers (Midi Pyrénées)

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

    Informations forums :
    Inscription : juin 2004
    Messages : 139
    Points : 164
    Points
    164

    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é Sénior
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    3 039
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 3 039
    Points : 4 617
    Points
    4 617

    Par défaut

    A combien est votre paramètre de session : extra_float_digits ? -10 ?

    Code :
    1
    2
     
    SHOW extra_float_digits
    Essayez de le mettre à 0 si c'est le cas.

    Code :
    1
    2
     
    SET extra_float_digits = 0;

  5. #5
    Membre actif
    Homme Profil pro Eric
    Informaticien
    Inscrit en
    juin 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric
    Localisation : France, Gers (Midi Pyrénées)

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

    Informations forums :
    Inscription : juin 2004
    Messages : 139
    Points : 164
    Points
    164

    Par défaut

    extra_float_digits me retourne 0.

  6. #6
    Expert Confirmé
    Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 831
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 831
    Points : 2 541
    Points
    2 541

    Par défaut

    Déjà comment reproduire le problème?
    En effet:
    Code :
    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 actif
    Homme Profil pro Eric
    Informaticien
    Inscrit en
    juin 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric
    Localisation : France, Gers (Midi Pyrénées)

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

    Informations forums :
    Inscription : juin 2004
    Messages : 139
    Points : 164
    Points
    164

    Par défaut

    en fait le "problème" semble se situer au niveau du stockage.
    par exemple :
    Code :
    INSERT INTO test VALUES (30.4)
    voici ce que me donne pg_dump
    Code :
    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é Sénior
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    3 039
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 3 039
    Points : 4 617
    Points
    4 617

    Par défaut

    Avez-vous lu l'article de la doc que je vous ai linké plus haut ..?

  9. #9
    Membre actif
    Homme Profil pro Eric
    Informaticien
    Inscrit en
    juin 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric
    Localisation : France, Gers (Midi Pyrénées)

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

    Informations forums :
    Inscription : juin 2004
    Messages : 139
    Points : 164
    Points
    164

    Par défaut

    oui et je vous en remercie.

    je l'ai aussi lu en français (on ne sait jamais)
    http://docs.postgresql.fr/9.1/dataty...tatype-numeric

    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
    Expert Confirmé
    Profil pro
    Inscrit en
    octobre 2008
    Messages
    1 831
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 831
    Points : 2 541
    Points
    2 541

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •