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 PHP Discussion :

round et nombre de décimal


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 46
    Points : 29
    Points
    29
    Par défaut round et nombre de décimal
    Bonjour,

    je souhaite utiliser la fonction round pour arrondir à deux décimales.
    Mais en effectuant le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $round=round(67.32284,2);
    echo($round);
    j'ai comme sortie ecran : 67.31999999999999

    de même si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $round=round(67.32284*100)/100;
    echo($round);
    j'en perds mon latin
    Si quelqu'un a une idée sur le pourquoi du comment, elle est la bienvenue.

    PS. : Je suis sous une config wamp (php 5.31)

  2. #2
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Points : 2 399
    Points
    2 399
    Par défaut
    Chez moi, ton premier bout de code affiche : 67.32

    Sinon, tu peux essayer avec la fonction number_format()
    http://php.net/manual/fr/function.number-format.php

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 46
    Points : 29
    Points
    29
    Par défaut
    j'ai presque mis le doigt sur le problème.

    Dans mon projet, j'utilise la bibliothèque PHPExcel et quand je la retire, round marche correctement.

    je suppose que cette bibliothèque modifie une constante de PHP. Mais quoi ?

    dans un fichier, il change la precision des float en la mettant à 16 au lieu de 14...

    Cela pourrait être ça ?

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    Tu mets le doigt sur une limite informatique.

    Ta librairie PHPExcel doit calculer ce que tu obtiens, càd que 67.32284 est le résultat d'une opération, sous forme de float, n'est-ce pas ?

    Or la représentation binaire de 67.32284 et de la valeur calculée sont peut-être différente... Tout ça à cause de l'arrondi en base 2...

    Voir cet article : http://blog.alterphp.com/2009/11/float-comparison.html
    (J'ai écrit cet article suite au même problème rencontré...)

    Utilise la librairie BC Math pour manipuler des floats de manière sûre...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 46
    Points : 29
    Points
    29
    Par défaut
    Merci pour le rappel (mes courts sur les types 'float' remontent un peu).

    Comme je ne maitrise pas la bibliothèque PHPExcel (qui volontairement modifie la précision des float avec ini_set), j'ai décidé de l'inclure juste pour les fonctions où cela était nécessaire.

    Ce qui m'évite le petit inconvénient ci dessus.

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    Citation Envoyé par harold63 Voir le message
    Merci pour le rappel (mes courts sur les types 'float' remontent un peu).

    Comme je ne maitrise pas la bibliothèque PHPExcel (qui volontairement modifie la précision des float avec ini_set), j'ai décidé de l'inclure juste pour les fonctions où cela était nécessaire.

    Ce qui m'évite le petit inconvénient ci dessus.
    Je suis tombé des nues quand j'ai compris le problème aussi. Effectivement le cours qui paraissait trivial prend tout son sens quand on rencontre un cas concret...

Discussions similaires

  1. [Nombre]formater le nombre de décimal après une virgule.
    Par PascalCmoa dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 09/03/2007, 10h40
  2. Définir un nombre de décimales
    Par IDE dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 11/01/2006, 17h52
  3. Comment fixer le nombre de décimal !
    Par Paul1804 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 09/01/2006, 15h12
  4. définir nombre de décimale
    Par capone dans le forum C++Builder
    Réponses: 5
    Dernier message: 08/01/2006, 14h15
  5. round avec nombre de décimale spécifiée
    Par bilb0t dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 14/04/2005, 16h44

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