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

Langage SQL Discussion :

oppération dans requette, pourquoi x chiffres apres la virgule


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut oppération dans requette, pourquoi x chiffres apres la virgule
    Bonjour,

    J'effectue une requette dans laquelle j'effectue une opération que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ( nb_page_min * Prix_pagesup + Prix_base + Fdp_base + Fdt_base) AS total30,
    Format des champs
    Prix_pagesup, Prix_base, Fdp_base, Fdt_base : float

    Pour cet échantillons de donnée :
    Prix_base = 29.99
    Fdp_base = 6.99
    Fdt_base = 0

    J'obtiens une valeur :
    36.979999542236

    Alors que je devrais obtenir le chiffre : 26.98

    Je comprends vraiment pas ...

    Pouvez vous m'aider ?

    Merci

  2. #2
    Membre averti Avatar de icsor
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2008
    Messages : 258
    Points : 436
    Points
    436
    Par défaut
    Bonjour,

    je pense qu'il faut que tu précise ton SGBD pour une question de ce genre.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 897
    Points : 53 135
    Points
    53 135
    Billets dans le blog
    6
    Par défaut
    Tout dépend des types originels des colonnes des tables. Si tous les types sont DECIMAL (XXX, 2) alors oui, c'est une erreur. Si un des types est FLOAT, alors oui, c'est normal, SQL ayant par consigne de transtyper implicitement "au plus large".

    mais cela peut aussi être un comportement anormal du SGBDR, ce qui peut être remédier par un contretypage via CAST.

    A +

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut
    Oui sans doute,

    Je travail sous mysql 5.0.32

    Merci

    Il s'agit de Float !

    c'est pour définir des tarifs en euros donc l'entier ne convient pas.

    Comment dois-je procéder pour obtenir un résultat avec 2 chiffres après la virgule sans retraiter ?

    Merci

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 897
    Points : 53 135
    Points
    53 135
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CAST(expression AS DECIMAL(?, 2))
    A +

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut
    Je trouve cela quand même limite de devoir effectuer une conversion pour obtenir un autre floatant ....

    Ca alourdi le code !

    Merci tout de même.

    Jérémie

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 106
    Points : 28 394
    Points
    28 394
    Par défaut
    C'est bien pour cela qu'existe le type DECIMAL (ou NUMBER) !
    Le type FLOAT est à éviter pour traiter des monnaies, il y a trop d'impondérables sur les résultats de calcul

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 314
    Points : 98
    Points
    98
    Par défaut
    Ok ok !

    du coup j'ai tout convertis en Décimal !

    Merci ca c'est de la bonne réponse qui me convient super bien.


    Merci

    Jérémie

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/06/2010, 17h21
  2. Affichage deux chiffres apres la virgule dans DBGrid
    Par alili mostafa dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/01/2010, 13h01
  3. Réponses: 2
    Dernier message: 26/06/2008, 11h21
  4. Réponses: 3
    Dernier message: 03/05/2008, 16h44
  5. Réponses: 2
    Dernier message: 02/08/2006, 17h04

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