Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework
Zend Framework Forum d'entraide sur la programmation PHP avec Zend Framework. Avant de poster -> FAQ ZF, Cours ZF
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/01/2011, 10h51   #1
ovh
Rédacteur
 
Avatar de ovh
 
Homme
Ingénieur développement logiciels
Inscription : mai 2002
Messages : 3 725
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : mai 2002
Messages : 3 725
Points : 6 310
Points : 6 310
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 :
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 :
Citation:
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 :
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 :
Citation:
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...

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 !
ovh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 16h42   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
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 :
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)
*/
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h33.


 
 
 
 
Partenaires

Hébergement Web