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

Requêtes MySQL Discussion :

L'enfer des décimales.


Sujet :

Requêtes MySQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 15
    Par défaut L'enfer des décimales.
    Bonjour à tous.

    J'ai mis en place une base de donnée dans laquelle je dois intégrer des nombres à virgules TRÈS flottantes (Ça va de 100 000 à 0,0000000000001).
    J'ai donc créé une table avec mes colonnes de données en "Decimal" (ce sont les champs 3 et 4 qui nous intéressent):
    • create table MaTable (Champ1 char(8), Champ2 int(3), Champ3 decimal(20,14), Champ4 decimal(20,14))


    Problème: les données que j'importe (depuis un .csv) sont tronquées au niveau de la virgule. Que l'import soit fait via mysql-import ou via phpmyadmin.

    Exemple, si un ligne de "Champ3" doit être à 0.05, elle sera à 0.

    J'ai tenté le float, même problème.
    J'ai tenté le double, même problème.

    Le seul moyen d'obtenir mes données correctement est de les passer en char.
    Problème: Impossible de calculer quoi que ce soit par la suite. J'ai bien 0.05 d'affiché, mais si je fais un "select (champ3 * 200) from MaTable Where condition", il me retourne 0.

    Comment faire pour que TOUT mon champ soit affiché? Est ce un problème d'import ? De format de colonne ? De table ?
    Je suis un peu perdu

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 15
    Par défaut
    Je viens de tester deux ou trois choses.
    J'ai mis mes champs en decimal(62,30) (j'ai mis au max ... pour voir ce que ca donnait).

    L'import pose toujours probleme, quand une décimale est présente, il tronque.

    Par contre, quand j'insère, ca donne ca:

    insert into MaTable values ("TEST", 106, 0.00005, 0.5) => ca marche

    insert into MaTable values ("TEST", 106, 0.000005, 0.5) => le champ3 passe à 0. Dès que je mets plus de 5 décimales, il me perd ma valeur.

    Pareil si je rentre la valeur 5E-5, ca passe.
    5E-6 devient 0.

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Dans les données à importer, le séparateur décimal est bien un point, pas une virgule ?

    Si tu peux les importer en VARCHAR, fais le dans une table provisoire puis exporte les données de cette table provisoire vers la vraie table en les convertissant ensuite avec CAST.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CAST(colonne_origine AS DECIMAL(20,14))
    EDIT
    Je viens de tester en créant une colonne de type DECIMAL(20,14) sur une de mes tables de test et en insérant la valeur 0.000000005, phpMyAdmin affiche 0.00000000500000 ce qui est correct. Par contre, en insérant 0,000000005, il m'informe que la valeur est tronquée et effectivement il affiche 0.00000000000000, probablement à cause du séparateur décimal qui est une virgule, ce qui n'est pas bon car interprété comme un séparateur d'éléments en SQL.

    J'ai même carrément pris ta requête de création de table et ta seconde requête d'insertion et j'ai bien les bonnes données insérées.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 15
    Par défaut
    Bonjour CinePhil, et merci pour cette réponse!

    Le séparateur est bien un point, oui

    Je vais tester le cast, merci pour l'idée.

    Ce qui est bizarre, c'est que même un insert se passe mal (au delà de 5 chiffres après la virgule, il passe à 0).

    Que ce soit en float ou en decimal.

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    J'ai édité mon message :
    J'ai même carrément pris ta requête de création de table et ta seconde requête d'insertion et j'ai bien les bonnes données insérées.
    Chez moi ça fonctionne normalement.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 15
    Par défaut
    Mon probleme d'import semble reglé (j'avais une virgule mal placée en début de fichier en effet).

    Par contre, toujours le même probleme pour les petits chiffres.
    Quand plus de 5 chiffres derrière la virgule, il arrondi à zéro

    Exemple:
    insert into MaTable (Champ1, Champ2, Champ3, Champ4, Champ5, Champ6, Champ7, Champ8, Champ9) values ("TEST2", 106, 0.5, 0.05, 0.005, 0.0005, 0.00005, 0.000005, 0.0000005)

    Résultat:
    TEST2 106 0.5 0.05 0.005 0.0005 0.00005 0 0

    Mes colonnes sont toutes en decimal(20,14)
    Sauf les deux premières bien entendu.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 15
    Par défaut
    Ok ... je viens de comprendre!

    C'est en fait Squirrel qui m'affiche mal mes lignes.

    Je viens de regarder sous phpmyadmin, j'ai bien mes données correctes.

    Je viens de me casser la tête une demi journée sur un problème qui n'existe pas... ca m'énerve.

    Deux bugs que je décèle dans Squirrel en une journée, ca commence à faire un peu trop (mais je veux rester sur du client libre...)

    Merci encore pour ton aide CinePhil !

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Ton Squirrel a peut-être le même comportement que celui de Tex Avery ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. Récupération des décimales
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/10/2006, 10h36
  2. Pourquoi Access me rajoute-t-il des décimales ?
    Par DjBeGi dans le forum Access
    Réponses: 2
    Dernier message: 15/06/2006, 12h08
  3. [TDBGrid] Affichage des décimales ?
    Par White Rabbit dans le forum Bases de données
    Réponses: 2
    Dernier message: 16/01/2006, 18h39
  4. Requete avec des décimales
    Par Sandrine75 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 27/06/2003, 10h18
  5. Réponses: 1
    Dernier message: 06/03/2003, 11h57

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