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 :

Une simple multiplication par 1000 !


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 934
    Par défaut Une simple multiplication par 1000 !
    Bonsoir,

    je ne comprends pas comment fonctionne la multiplication avec php.
    Je récupère des valeurs stockées en mysql dans des colonnes de type decimal(15,3).
    Je multiplie ces valeurs par mille. Cela me donne le bon résultat, sauf dans un cas !!
    Le 8200 se transforme désespérément en 8 alors je j'aurais apprécié 8200000 !! Voir ici http://test03.christophe-charron.org...te_bizarre.png la copie écran !!
    J'y perds mon latin.

    D'avance, merci pour vos éclaircissements ...

  2. #2
    Membre éprouvé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 934
    Par défaut
    Bonjour,
    en complément, j'aimerai comprendre comment pouvoir faire harmonieusement une simple opération.
    Suivant que je cherche à multiplier 8200.000,2114.000,-19474.750 et 9300.000,
    avec le code en fin de post ou dont le résultat est visible ici http://test03.christophe-charron.org...2007_09_21.php, je n'obtiens pas le même résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <?php
    header('Content-type: text/plain; charset=utf-8');
    define('EOL', "\r\n");
      echo ("------------------------").EOL;
      $toto="8200.000";
      $qte_stock= $toto;
      echo $qte_stock.EOL;
      $val_qte_stock=$qte_stock*10;
      echo $val_qte_stock.EOL;
      $val_qte_stock=$qte_stock*100;
      echo $val_qte_stock.EOL;
      $val_qte_stock=$qte_stock*1000;
      echo $val_qte_stock.EOL;
      $val_qte_stock=$qte_stock*10000;
      echo $val_qte_stock.EOL;
     
     
     
      echo ("------------------------").EOL;
      $toto="2114.000";
      $qte_stock= $toto;
      echo $qte_stock.EOL;
      $val_qte_stock=$qte_stock*10;
      echo $val_qte_stock.EOL;
      $val_qte_stock=$qte_stock*100;
      echo $val_qte_stock.EOL;
      $val_qte_stock=$qte_stock*1000;
      echo $val_qte_stock.EOL;
      $val_qte_stock=$qte_stock*10000;
      echo $val_qte_stock.EOL;
     
      echo ("------------------------").EOL;
      $toto="-19474.750";
      $qte_stock= $toto;
      echo $qte_stock.EOL;
      $val_qte_stock=$qte_stock*10;
      echo $val_qte_stock.EOL;
      $val_qte_stock=$qte_stock*100;
      echo $val_qte_stock.EOL;
      $val_qte_stock=$qte_stock*1000;
      echo $val_qte_stock.EOL;
      $val_qte_stock=$qte_stock*10000;
      echo $val_qte_stock.EOL;
     
      echo ("------------------------").EOL;
      $toto="9300.000";
      $qte_stock= $toto;
      echo $qte_stock.EOL;
      $val_qte_stock=$qte_stock*10;
      echo $val_qte_stock.EOL;
      $val_qte_stock=$qte_stock*100;
      echo $val_qte_stock.EOL;
      $val_qte_stock=$qte_stock*1000;
      echo $val_qte_stock.EOL;
      $val_qte_stock=$qte_stock*10000;
      echo $val_qte_stock.EOL;
     
    ?>

  3. #3
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut
    Bonjour,

    Pourquoi dis tu que tu n'obtiens pas le même résultat ?

    Les opérations sont justes, non ?
    ------------------------
    8200.000
    82000
    820000
    8200000
    82000000
    ------------------------
    2114.000
    21140
    211400
    2114000
    21140000
    ------------------------
    -19474.750
    -194747.5
    -1947475
    -19474750
    -194747500
    ------------------------
    9300.000
    93000
    930000
    9300000
    93000000
    voici une fonction pour tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <?
    define('EOL', "<br>");
     
    function test_multiply($amount){
     
      $amount = ereg_replace(" ", "", $amount);  // on enlève les espaces
      echo ("------------------------").EOL;
      $x = 1;
      for($i = 1; $i < 6 ; $i++){
      $val_qte_stock = $amount* $x;
      echo number_format($val_qte_stock, 3, '.', '') . " &nbsp; &nbsp; (x $x) ".EOL;
      $x = $x * 10;
      }
    }
    test_multiply("8 200.000");    // c'était l'espace qui posait probleme
    test_multiply(2114.000);
    test_multiply(-19474.750);
    test_multiply(9300.000);
    ?>
    avec number_format() tu conserves les décimales

    La multiplication s'arrêtait au premier espace. C'est pourquoi, pour 8 200.00 * 10 ( ou 100, 1000, etc) ça retournait 800, 8000, 80000, etc ....

  4. #4
    Membre éprouvé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 934
    Par défaut
    Citation Envoyé par N1bus Voir le message
    Bonjour,

    Pourquoi dis tu que tu n'obtiens pas le même résultat ?

    Les opérations sont justes, non ?
    Arrrgghhhhhhhhhhh
    Je dois vraiment passer pour un neuneu !!!
    Voici la copie écran de ce que j'obtiens avec le même script mais avec un serveur WAMP5 sur mon poste windows.
    http://test03.christophe-charron.org...9-22-local.PNG

    Dans ce cas, on voit que 8200 * 1000 part en live ...
    Et que pour moi, ce n'est pas un problème de "grande" valeur puisque l'opération sur 9300 donne le résultat escompté.
    J'imagine que c'est donc un problème de paramètrage du serveur ??

  5. #5
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut


    Heuuuu , là je ne sais pas quoi te dire. C'est de la magie ton truc !

    C'est quel code, celui que tu as envoyé ou celui que je t'ai mis ?

  6. #6
    Membre éprouvé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 934
    Par défaut
    De la magie noire oui !!!
    quelque part ça me rassure parce qu'il me semble qu'avec des nombres à taille humaine, on ne devrait pas avoir de souci. Je ne dis pas que pour les nombres puissance 250 ou ceux avec 37 décimales il ne faille pas prendre d'autres précautions mais là ça frise le gag !!

    La copie écran initiale reflète le script brut de pomme sans ta procédure.
    L'exécution en local, avec ta procédure donne le bon résultat.
    Voir ici la copie écran http://test03.christophe-charron.org...elamort_01.png
    et ici le script sur serveur internet : http://test03.christophe-charron.org...2007_09_22.php

    Mais tu es d'accord avec moi que ce n'est qu'un rustine dont on n'est pas du tout sûr qu'elle fonctionne dans tous les cas, puisque déjà le script initial devrait fonctionner !!!

    Donc il faut vraiment que je comprenne le pourquoi du comment !!!

Discussions similaires

  1. [XL-2007] Boucle pour une sélection multiple par nom sur un tableau croisé dynamique VBA
    Par kuro200 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/06/2015, 20h31
  2. Réponses: 1
    Dernier message: 15/11/2011, 08h46
  3. fitting une courbe (régression multiple) par des coordonées en 3d
    Par marouame dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 19/05/2011, 18h36
  4. Réponses: 3
    Dernier message: 16/01/2008, 07h12

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