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 :

Bogue number_format ?


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de O( N )
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2006
    Messages : 126
    Par défaut Bogue number_format ?
    Bonjour à tous,

    voilà le petit problème que j'ai trouvé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo number_format(1124000727777607680000 * 5); // == 5,620,003,638,888,038,924,288 ??
    Les zéros ont disparus ! Pour moi le calcul est donc faux ! quelqu'un à t il une idée merci

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    effectivement ce qui s'affiche n'est pas exactement logique.
    As-tu essayé en 2 lignes ? et d'afficher le résultat du calcul par un var_dump de base ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $total = 1124000727777607680000 * 5;
    echo number_format($total)."<br>";
    var_dump($total);
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre confirmé Avatar de O( N )
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2006
    Messages : 126
    Par défaut je teste dès que possible
    Le problème est la récupèration d'une valeur sans les exposants et si possible juste :-)

  4. #4
    Membre confirmé Avatar de O( N )
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2006
    Messages : 126
    Par défaut Initialement
    Je présente l'idée :
    Afin de ne pas avoir un résultat de la forme 1634.5478E+18

    Je fais à peu près
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $resultat = implode (explode (',' , number_format($x*$y)));
    Le problème est l'erreur rencontrée.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ton nombre dépasse la limite d'un entier en 64 bits.
    Tu peux utiliser les fonctions BC :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo bcmul('1124000727777607680000','5');
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 197
    Par défaut
    Bonjour,

    En plus d'utiliser la fonction proposée par sabotage, qui te permet la manipulation de grands nombres, tu peux créer facilement ta propre fonction de formattage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	function formatBigNumber($nb)
    	{
    		$pos = strlen($nb);
    		$fmt = '';
    		while ($pos > 3)
    		{
    			$pos -= 3;
    			$fmt = ','.substr($nb, $pos, 3).$fmt;
    		}
    		return substr($nb, 0, $pos).$fmt;
    	}
    echo formatBigNumber(bcmul("1124000727777607680001", "21555467518"));
     
    //24,228,361,177,818,582,674,008,893,707,518

  7. #7
    Membre confirmé Avatar de O( N )
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2006
    Messages : 126
    Par défaut Merci
    Voilà j'ai pus tester, çà fonctionne ! j'utilise les commandes 'bc' plutôt que ce que j'ai développé finalement ... pour pas perdre de temps

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

Discussions similaires

  1. De l'aide SVP un petit bogue de script une reconnaissance confuse
    Par richard77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/05/2006, 14h03
  2. le number_format
    Par scastong dans le forum Langage
    Réponses: 3
    Dernier message: 29/03/2006, 22h45
  3. [PhpPgAdmin] c'est lui qui bogue ou c'est moi ?
    Par Chauve souris dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 28/11/2005, 16h30
  4. Réponses: 4
    Dernier message: 18/04/2005, 09h06
  5. [regex][string] replaceAll bogué ?
    Par 7eme dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 13/11/2003, 16h36

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