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 :

Reformatage Nombre avec 2 décimales


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Points : 26
    Points
    26
    Par défaut Reformatage Nombre avec 2 décimales
    Bonsoir,

    Cela doit paraitre simple pour pas mal d'entre vous mais je n'arrive vraiment pas à reformater un chiffre pour l'afficher :

    J'ai un chiffre dans une table qui peut être 58899,7 ou 58899 par exemple, je voudrais le réafficher en 58 899,70 ou 58 899,00 (donc forcer 2 décimales avec un zéro après ou zéro si il n'y en n'a pas et en plus le formater à la française).

    Quelle(s) fonction(s) dois-je utiliser, j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nbr = number_format($nbr, 2, ',', ' ');
    sprintf(), etc.

    Mais n'arrive pas au résultat attendu.
    Merci d'avance de votre aide.

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut

    Pour ce qui relève du formatage des nombres PHP fournit tout ce qu'il faut en natif avec ICU et la classe NumberFormatter

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Points : 26
    Points
    26
    Par défaut
    Merci, mais cela ne réponds pas vraiment à ma question.

    Quelle fonction utiliser pour avoir en sortie :
    (In : nombre en entrée, Out : Affichage attendu en sortie)

    In : 58899,7
    Out : 58 899,70

    In : 58899
    Out : 58 899,00

  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
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Pour mettre les deux décimales après le point, tu utilises sprintf (voir manuel)

    Pour mettre en sortie, un format à la Française genre xx xxx.xx, tu utilises la class donnée par Martin

    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  5. #5
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par -Eric- Voir le message
    Merci, mais cela ne réponds pas vraiment à ma question.
    T'es rigolo toi. Suffit de lire la doc de la classe qui est en lien dans ma précédente réponse et de faire au moins quelques essais avant de venir se plaindre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
     
    $nf = new \NumberFormatter('fr_FR', \NumberFormatter::DECIMAL);
    $nf->setAttribute(\NumberFormatter::FRACTION_DIGITS, 2);
     
    $x   = '58899.7';
    $out = $nf->format($x);  // 58 899,70
     
    $y   = '58899';
    $out = $nf->format($y);  // 58 899,00
     
    ?>
    Un dernier point : dans ton exemple : 58899,70 n'est pas un nombre valide en PHP tu dois utiliser le point comme séparateur décimal pour tout ce qui relève des manipulations internes au code.

    Pour pouvoir utiliser malgré tout ce formatage en natif, tu dois paramétrer autrement la classe NumberFormatter -> cf. la doc

  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
    Points : 3 390
    Points
    3 390
    Par défaut
    Oui en y regardant bien, d'ailleurs tu peux faire le tout avec cette classe QUE JE Ne CONNAISSAIS PAS

    Merci
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut Fench,

    Je te conseille de te pencher alors sur la librairie d'internationalisation ICU. C'est une pépite. Je n'utilise d'ailleurs qu'elle pour tous mes développements et en plus j'en apprend à chaque fois.
    Après côté PHP, la doc est loin d'être exhaustive mais elle est largement suffisante pour 99% des besoins. Pour en tirer la quintessance il faut directement aller lire le code C de la librairie qui te file tous les paramétrages possibles et inimaginables.
    Une pépite je te dis

  8. #8
    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
    Points : 3 390
    Points
    3 390
    Par défaut
    Merci Martin,

    Effectivement, je la trouve déjà pas mal cette librairie pour Php, et tu dois avoir raison pour les 99 % des cas.

    Maintenant, sur Symfony, il semble utiliser ce standart ICU mais alors moi, j'ai fait de l'internationnalisation assez pourri avec du xml sur ce framework, et je crois qu'il faut que je revois ce truc.

    Merci, encore, A+
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Points : 26
    Points
    26
    Par défaut
    Merci à tous les 2 !
    Mais dans mon environnement en 5.3.16 cette classe n'existe pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Class 'NumberFormatter' not found

  10. #10
    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
    Points : 3 390
    Points
    3 390
    Par défaut
    (PHP 5 >= 5.3.0, PECL intl >= 1.0.0) via manuel php
    Ta version php est bonne ET le module intl tu es bon ?

    Sur le lien de Martin, regardes au niveau de l'installation de la configuration ...
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Points : 26
    Points
    26
    Par défaut
    Bonsoir,

    Apparemment le module intl n'est pas installé, je vais voir avec l'hébergeur ce qui peut être fait.

Discussions similaires

  1. Formatage d'un nombre avec 2 décimales
    Par anibaldeveloppment dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/10/2013, 15h41
  2. Réponses: 4
    Dernier message: 15/11/2011, 16h43
  3. Requête : Format Nombre avec 14 décimales !
    Par PascaLem dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 28/03/2009, 12h06
  4. Afficher un nombre avec 2 décimales.
    Par Higestromm dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/02/2006, 16h12

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