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

PHP & Base de données Discussion :

arrondi dans une requête [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Par défaut arrondi dans une requête
    Bonjour,

    J'ai une table t_livraison qui contient 2 champs d_paiement et d_restant_du.

    Lors d'une requête de mise à jour, je retranche au restant dû existant le paiement.

    Jusque là, tout semble assez logique.

    Sauf que, le calcul me sort quelque chose d'absurde...

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $sPAY = str_replace(",", ".", $sPAY);
    // le *1.0 et le round ont été ajouté pour vérifier mais avec ou
    // sans, le problème est identique
    $dPAY = round(CalculPaiement($sPAY), 2)*1.0;
    $ReqSQL = "UPDATE t_livraison
               SET d_reste_du = d_reste_du - " . $dPAY. "  
               WHERE
                   id_s_livr = '". $_POST["IDLIVR"] . "' ";
    $result = mysql_query($ReqSQL);
    $sPAY contient le détail du paiement et fonctionne parfaitement (le champs associé dans la base.

    Dans mon exemple, le montant restant dû est de 1107.90 €
    Le paiement est de 1107.70 €

    Après la mise à jour, le restant dû est : 0.200000000000045 €

    D'où sort cette valeur ???

    Merci de vos conseils,

    Vincent

  2. #2
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonjour,

    Le pb vient de ta base, je pense.

    Donnes moi la description de ta table avec les deux champs incriminés

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Par défaut
    Bonjour,

    Voici le détail de ma base....

    `s_paiement` text NOT NULL,
    `d_paiement` double NOT NULL default '0',
    `d_reste_du` double NOT NULL default '0'

    Ce qui est étonnant c'est que y'a juste avec le calcul que
    le champ d_reste_du contient un truc à virgule....

    Merci

    Vincent

  4. #4
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    C du MySQL ou du PostgreSQL ?

    Dans tous les cas faut pas utiliser du float ou double pour des données monaitaire car ya des problèmes d'arrondie et de formatage !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 86
    Par défaut
    Bonjour c'est du MySQL mais le signe € est rajouté à l'affichage. Tout est traité comme du simple double. Donc je ne comprends vraiment pas d'où vient le problème.

    Vincent

  6. #6
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    C un type DECIMAL qu'il te faut

    Rq:
    En fait, ce n'est pas lié à MySQL mais commun à l'ensemble des SGBD et des langages de programmations. Le pb, c'est la notation des nombres à virgules flotantes par l'ordinateur

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

Discussions similaires

  1. Différence entre majuscule et minuscule dans une requête
    Par Asdorve dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/06/2004, 14h42
  2. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  3. calcul dans une requête
    Par blaz dans le forum Langage SQL
    Réponses: 8
    Dernier message: 22/12/2003, 10h31
  4. [SQL] Renommer un champ dans une requête
    Par martonpylon12 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 15/11/2003, 01h59
  5. petit probleme dans une requte POSTGRE SQL
    Par ghis le fou dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2003, 13h51

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