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

[langage] espace dans un nombre pour une meilleure lisibilité [En exploitation]


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 6
    Points : 6
    Points
    6
    Par défaut [langage] espace dans un nombre pour une meilleure lisibilité
    Bonjour à tous, je souhaiterais mettre en place des espaces dans un nombre pour une meilleure lisibilité.
    A l'heure actuelle j'ai mis en place une fonciton:

    - $prixeuro = ($prix / 119.33133);
    - $prixeuro = sprintf ("%0.2f", $prixeuro);

    Malheureusement le nombre affiché est sous la forme "100000", je souhaiterai qu'il y est un espace tous les 3 chiffres afin d'avoir un meilleur visuel (ex. 100 000).

    Est-ce que quelqu'un aurait une idée de quelle manière je peux mettre en place cette fonction ? N'ayant pas une grande connaissance de la programmation en PERL, je suis un peu perdu !

    Merci d'avance ...

  2. #2
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut Re: espace dans un nombre pour une meilleure lisibilité
    Bonjour,

    Citation Envoyé par pacificc
    je souhaiterais mettre en place des espaces dans un nombre pour une meilleure lisibilité.
    A l'heure actuelle j'ai mis en place une fonciton:

    - $prixeuro = ($prix / 119.33133);
    - $prixeuro = sprintf ("%0.2f", $prixeuro);

    Malheureusement le nombre affiché est sous la forme "100000", je souhaiterai qu'il y est un espace tous les 3 chiffres afin d'avoir un meilleur visuel (ex. 100 000).

    Est-ce que quelqu'un aurait une idée de quelle manière je peux mettre en place cette fonction ? N'ayant pas une grande connaissance de la programmation en PERL, je suis un peu perdu !
    J'ai bien une réponse, mais si elle est efficace, je la trouve un peu tordue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $prixeuro = ($prix / 119.33133);
    $prixeuro = sprintf ("%0.2f", $prixeuro);
     
    $separateur=" ";
    $groupage=3;
    1 while ($prixeuro =~ s/(\d)(\d{$groupage}($|$separateur))/$1separateur$2/);
     
    print "$prixeuro\n";
    Si le formatage est toujours le même et qu'il est superflu de stocker ses options dans les variables $separateur et $groupage, on peut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1 while ($prixeuro =~ s/(\d)(\d{3}($| ))/$1 $2/)
    En fait, on passe par une expression rationnelle pour récupérer les chiffres par paquets de 3 (ou moins), en boucle, tant qu'il reste des paquets, et on les remets dans la chaine (le s de substitution), en les séparant avec un blanc.

    Ceci dit, si quelqu'un a mieux, je suis preneur ... Ce code, s'il est efficace, s'il peut être utile, ne me paraît pas encore assez simple pour mériter un snippet ...

    Bonne continuation.


    P.S. Lorsque tu veux poster du code, dans tes messages sur le forum, n'hésite pas à utiliser les balises de marquage de code : elles sont disponibles par le bouton (Code) au dessus de la zone d'édition du message ou en tapant directement [ code] et [ /code] (sans le blanc) autour de la portion de source.

    Je te laisse le soin d'éditer ton message au début de cette enfilade pour mettre ton code en valeur. C'est une bonne habitude qui facilite la lecture et évite aux modérateurs d'avoir à reformater les messages.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Rebonjour, en ce qui concerne le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $prixeuro = ($prix / 119.33133); 
    $prixeuro = sprintf ("%0.2f", $prixeuro); 
     
    $separateur=" "; 
    $groupage=3; 
    1 while ($prixeuro =~ s/(\d)(\d{$groupage}($|$separateur))/$1separateur$2/); 
     
    print "$prixeuro\n";
    j'ai bien essayé de le mettre en place, mais lorsque que je test le script j'ai un "internal server error" :-( ... et pour ce qui est du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1 while ($prixeuro =~ s/(\d)(\d{3}($| ))/$1 $2/)
    là il n'y a aucune modification effectuée sur le formatage des nombres ...

  4. #4
    Membre actif Avatar de Gamdwin
    Inscrit en
    Avril 2005
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 186
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par pacificc
    Rebonjour, en ce qui concerne le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $prixeuro = ($prix / 119.33133); 
    $prixeuro = sprintf ("%0.2f", $prixeuro); 
     
    $separateur=" "; 
    $groupage=3; 
    1 while ($prixeuro =~ s/(\d)(\d{$groupage}($|$separateur))/$1separateur$2/); 
     
    print "$prixeuro\n";
    j'ai bien essayé de le mettre en place, mais lorsque que je test le script j'ai un "internal server error" :-( ... et pour ce qui est du code
    Faut zieuter les logs pour savoir pourquoi il y a une erreur.
    Mieux encore, tu peux faire un "perl -c tonfichier.pl" pour vérifier la syntaxe.
    Mais elle est correcte, sauf si tu as fait un "use strict;" au début, en ce cas il faut déclarer $separateur et $groupage avec un "my" avant.

    Sinon dans la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1 while ($prixeuro =~ s/(\d)(\d{$groupage}($|$separateur))/$1separateur$2/);
    Il manque un '$' juste avant le dernier "separateur" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1 while ($prixeuro =~ s/(\d)(\d{$groupage}($|$separateur))/$1$separateur$2/);



    Citation Envoyé par pacificc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1 while ($prixeuro =~ s/(\d)(\d{3}($| ))/$1 $2/)
    là il n'y a aucune modification effectuée sur le formatage des nombres ...
    C'est parce que tu as un "." dans le code pour séparer les décimales.

    Essaie avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1 while ($prixeuro =~ s/(\d)(\d{3}($| |\.))/$1 $2/)
    "I hate quotations. Tell me what you know." (Ralph Waldo Emerson)

  5. #5
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    C'est ma faute, ma très grande faute ...

    Premièrement, j'ai commis une erreur de frappe ... dans l'expression rationnelle, il fallait lire '$1$separateur$2' au lieu de '$1separateur$2'

    Ce que je t'ai passé fonctionne pour des nombres entiers. Le séparateur décimal bloque mon traitement ...

    Voici néanmoins un petit contournement du problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    my ($p_entiere, $p_decimale)=split (/\./, $prixeuro);
     
    my $separateur=" ";
    my $groupage=3;
    1 while ($p_entiere =~ s/(\d)(\d{$groupage}($|$separateur))/$1$separateur$2/);
    # Ou, en constant
    # 1 while ($p_entiere =~ s/(\d)(\d{3}($| ))/$1 $2/);
     
    $prixeuro = join (".", $p_entiere, $p_decimale);
     
    print "$prixeuro\n";
    Je le fais tourner en local, n'ayant pas de serveur/CGI, mais ça ne devrait pas poser de problème majeur.

    Bonne continuation
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  6. #6
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    ok tout fonctionne à merveille ... merci pour tout !!!

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

Discussions similaires

  1. URL rewriting pour une meilleure visibilité
    Par Yoteco dans le forum MVC
    Réponses: 13
    Dernier message: 30/08/2007, 20h50
  2. Quel DOCTYPE choisir pour une meilleur compatibilité FF / IE
    Par Fouko dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/05/2007, 22h26
  3. Deux passages dans mon "execute" pour une seule soumission
    Par fabricew59 dans le forum Struts 1
    Réponses: 7
    Dernier message: 27/06/2006, 14h24
  4. Quel langage pour une meilleure portabilité Win/Linux
    Par darkervein dans le forum OpenGL
    Réponses: 3
    Dernier message: 22/04/2005, 14h59

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