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

Zend Framework PHP Discussion :

Conversion de nombres avec LocalizedToNormalized


Sujet :

Zend Framework PHP

  1. #1
    ovh
    ovh est déconnecté
    Rédacteur
    Avatar de ovh
    Homme Profil pro
    Architecte devops web full stack
    Inscrit en
    Mai 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte devops web full stack

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 842
    Par défaut Conversion de nombres avec LocalizedToNormalized
    Bonjour à tous,

    Je rencontre un problème de conversion de formats de nombres avec les filtres ZF. Convertir un nombre au format "informatique" (1234.56) dans le format français (1 234,56) ne pose pas de problème. L'inverse par contre ne marche pas si on utilise l'espace comme séparateur de milliers. Donc 1 234,56 ne sera pas converti, mais 1234,56 sera bien converti en 1234.56 !

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $filter = new Zend_Filter_NormalizedToLocalized();
    $nombre = "1234.56";
    echo "<p>nombre original = $nombre - nombre formaté = " . $filter->filter($nombre) . "</p>";
    $filter = new Zend_Filter_LocalizedToNormalized();
    $nombre = "1 234,56";
    echo "<p>nombre original = $nombre - nombre formaté = " . $filter->filter($nombre) . "</p>";
    Le code ci-dessus m'affiche ceci :
    nombre original = 1234.56 - nombre formaté = 1 234,56
    nombre original = 1 234,56 - nombre formaté = 1 234,56
    J'ai essayé en précisant la locale explicitement (avec 'fr', 'fr_FR', rien n'y fait), en essayant de préciser le format de nombre... rien ne marche.

    La seule solution que j'ai trouvé est de virer les espaces à la main avec str_replace, mais c'est moche d'en arriver là...
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $filter = new Zend_Filter_LocalizedToNormalized();
    $nombre = "1 234,56";
    echo "<p>nombre original = $nombre - nombre formaté = " . $filter->filter(str_replace(' ', '', $nombre)) . "</p>
    Ce qui donne bien :
    nombre original = 1 234,56 - nombre formaté = 1234.56
    Si quelqu'un a meilleure une idée ?


    Tutoriels sur les UPS, e-commerce, PHP, critiques de livres...

    Pensez à consulter les FAQs et les cours et tutoriels.
    FAQ Linux - Cours et tutoriels Linux - FAQ PHP - Cours et tutoriels PHP
    Ce forum est fait pour vous et surtout par vous, merci d'en respecter les règles.

    Je n'ai rien à voir avec la société www.ovh.com !

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    ouai ca me semble pas très au point leur truc, l'espace est un peu foireux, mais j'ai le même problème avec ICU

    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
    $nombre = '1234.56';
    $fmt = new NumberFormatter('fr_FR', NumberFormatter::DECIMAL);
    var_dump($fmt->format($nombre));
     
    $nombre = '1 234,56';
    $fmt = new NumberFormatter('fr_FR', NumberFormatter::DECIMAL);
    var_dump($fmt->parse($nombre));
     
    $nombre = '1234,56';
    $fmt = new NumberFormatter('fr_FR', NumberFormatter::DECIMAL);
    var_dump($fmt->parse($nombre));
     
    /*
    string(9) "1 234,56"
    float(1)
    float(1234.56)
    */

Discussions similaires

  1. Fonction de conversion de nombre en lettres
    Par david_chardonnet dans le forum Langage
    Réponses: 21
    Dernier message: 08/12/2021, 17h51
  2. Réponses: 4
    Dernier message: 15/11/2011, 16h43
  3. Conversion vers un nombre avec to_number
    Par manas dans le forum SQL
    Réponses: 2
    Dernier message: 20/07/2010, 15h25
  4. sum avec des nombres avec virgule
    Par Bruno2000 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/09/2004, 15h01
  5. [Format]nombres avec des 0
    Par zozolh2 dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 01/06/2004, 08h43

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