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 :

Problème de nombres scientifiques


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 40
    Points : 26
    Points
    26
    Par défaut Problème de nombres scientifiques
    Bonjour,

    J'ai actuellement un problème. Je travail sur des nombres stockés dans une base, en deux parties : la partie alphanumérique du nombre d'un côté, et le nombre de décimales de l'autre.

    Instinctivement, j'ai opté pour cette formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT nombre / POWER(10, nb_decimales) 
    FROM matable
    Jusque là, tout va bien, sauf que j'alimente un fichier de sortie, donc je dois CASTer la donner en char :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CAST(nombre / POWER(10, nb_decimales) AS CHAR) 
    FROM matable
    Seulement, le problème est qu'il ne m'affiche plus les décimales à partir de la cinquième... (ex : 1 / 10000000 ==> 0.0000 au lieu de 0.00000001)

    Du coup, je me dis que je dois une nouvelle fois CASTer pour convertir le tout en DECIMAL avec une précision convenable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT CAST(CAST(nombre / POWER(10, nb_decimales) AS DECIMAL(24,9)) AS CHAR) 
    FROM matable
    Un nouveau problème frappe alors: la sortie affiche les zéro non significatifs. Du coup, je me dis que je pourrais modifier la précision en mettant nb_decimales en tant que deuxième argument (DECIMAL(24,nb_decimales)), mais ça ne passe pas : erreur au lancement de la requête puisqu'une constante est attendue...

    J'ai essayé une autre feinte en utilisant la fonction ROUND, mais dès que je remplace le nombre de décimale par nb_decimales, il m'affiche un nombre scientifique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT  CAST(ROUND(nombre / POWER(10, nb_decimales), nb_decimales) AS CHAR)
    Bref, je suis en panne d'inspiration. Connaissez-vous une méthode où l'on puisse récupérer à coup sur un nombre au format alphanumérique issue d'une division, et qui ne soit pas affiché comme format scientifique ?
    (ex : je veux 0.000001 à l'issue de la division 1 / 10^6 et non pas 1e-06)

    Merci.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    Pour info, j'ai trouvé ceci, qui ne marche pas trop mal. Je trouve ça triste d'en arriver jusque là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TRIM(TRAILING '.' FROM TRIM(TRAILING 0 FROM ROUND(nombre / POWER(10, nb_decimales), nb_max_decimales)))

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    J'ai du mal à comprendre ton problème.

    Si je fais cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CAST( 1 / POWER( 10, 6  )  AS DECIMAL( 12, 6  )  )
    MySQL m'affiche : 0.000001
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    En gros, le soucis est que je n'arrive pas à afficher les nombres sous leur forme complète plutôt que sous leur forme scientifique.
    Le format en sortie t'affichera les 0 inutiles si tu utilises cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CAST( 1 / POWER( 10, 4  )  AS DECIMAL( 12, 6  )  )
    Cet exemple affichera 0.000100 si je ne me trompe pas.
    Du coup, j'avais dans l'idée de mettre la donnée nb_decimales à la fois dans la fonction POWER et dans le nombre de décimales du CAST, mais ça ne fonctionne pas.

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par MrWeb Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CAST( 1 / POWER( 10, 4  )  AS DECIMAL( 12, 6  )  )
    Cet exemple affichera 0.000100 si je ne me trompe pas.
    Effectivement et c'est logique puisque tu demandes 6 décimales !
    Le chiffre 1 en DECIMAL (12, 6) s'écrira 1,000000.

    Du coup, j'avais dans l'idée de mettre la donnée nb_decimales à la fois dans la fonction POWER et dans le nombre de décimales du CAST, mais ça ne fonctionne pas.
    C'est pourtant ce que j'ai fait non ?
    Citation Envoyé par CinéPhil
    J'ai du mal à comprendre ton problème.

    Si je fais cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CAST( 1 / POWER( 10, 6  )  AS DECIMAL( 12, 6  )  )
    MySQL m'affiche : 0.000001
    En gros, le soucis est que je n'arrive pas à afficher les nombres sous leur forme complète plutôt que sous leur forme scientifique.
    Mais avec ta dernière requête ou la mienne, tu n'affiches pas le nombre sous sa forme scientifique 1E-6 !

    Une fois de plus :
    J'ai du mal à comprendre ton problème.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 40
    Points : 26
    Points
    26
    Par défaut
    La fonction CAST(... AS DECIMAL(x,y)) doit contenir deux valeurs constantes si ont veut que ça marche.

    L'importance pour moi de récupérer un nombre bien formaté, est qu'il est exporté tel-quel dans un fichier csv.

    Pour en revenir à la fonction proposée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CAST(1 / POWER(10, 6)  AS DECIMAL(12, 6 ))
    Elle ne fonctionnera pas si je met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CAST(Matable.monNombre / POWER(10, maTable.nombreDecimales)  AS DECIMAL(12, maTable.nombreDecimales))

Discussions similaires

  1. [SQL] Problème avec nombre d'enregistrements dans une table
    Par zana74 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 14/08/2006, 13h28
  2. Problème avec nombre d'enregistrements dans une table
    Par zana74 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/08/2006, 13h21
  3. Problème de nombre de caractères max dans Listbox
    Par jojoestpetit dans le forum Access
    Réponses: 1
    Dernier message: 09/04/2006, 11h39
  4. problème avec nombre au niveau forms
    Par momo9237 dans le forum Oracle
    Réponses: 2
    Dernier message: 08/11/2005, 18h22
  5. Réponses: 1
    Dernier message: 11/10/2004, 10h47

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