p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Nouveau Membre du Club
    Inscrit en
    mars 2006
    Messages
    585
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 585
    Points : 36
    Points
    36

    Par défaut tranformation de chaine numérique

    Bonjour,

    J'ai une chaine numérique qui correspond à un montant. De ce montant, je dois d'abord supprimer les "," ou "." correspondant au décimal.

    En suite, je dois réaliser une action pour que cette variable fasse 20 caractéres, en mettant des "0" devant mon montant
    exemple :
    00000000000001242322

    En sachant que ce montant est variable, comme puis je faire pour retrouver avec le bon nombre de "0"0


    my $toto="12423.22";
    $toto =~ s/[\.\,]//g;
    merci d'avance

  2. #2
    Expert Confirmé Sénior


    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    1 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mai 2012
    Messages : 1 742
    Points : 4 689
    Points
    4 689
    Billets dans le blog
    1

    Par défaut

    La virgule n'étant pas un caractère spécial pour les expression régulières, il n'y a pas besoin de la précéder d'un caractère d'échappement. Donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $toto="12423.22";
    $toto =~ s/[\.,]//g;
    ou, peut-être plus simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $toto="12423.22";
    $toto = 100 * $toto
    Cela fait, tu obtiens 1242322, tu comptes le nombre de caractères de ton nombre et ajoute en tête le nombre de 0 nécessaires pour obtenir 20 caractères.

    $toto = '0' x (20 - len($toto)) . $toto;



    Ou, beaucoup mieux en principe, tu utilises l'une des trois fonctions suivantes qui servent à ce genre de formatage: pack, sprintf (voire directement printf) ou format ... Sauf que leur syntaxe n'est pas toujours du gâteau.

    Un exemple qui devait t'aider avec sprintf:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $toto="12,423.22";
    $toto =~ s/[\.,]//g; # toto vaut maintenant 1242322
    $toto = sprintf  "%020d", $toto; # $toto vaut maintenant 00000000000001242322
    Le format "%020d" utilisé par sprintf déclare que l'on veut formater le nombre passé en paramètre ($toto) comme un entier signé sur 20 caractères, remplis à gauche avec des 0.

    C'est l'idée. A ajuster éventuellement si le nombre peut être négatif. Si $toto vaut -1242322 avant le sprintf, il deviendra -0000000000001242322 (donc un zéro de moins pour permettre le signe -, le tout restant sur 20 caractères), ce qui est sans doute ce que tu recherches, mais à confirmer.
    La programmation fonctionnelle en Perl : 1. les opérateurs de liste; 2. les fonctions d'ordre supérieur; 3. étendre le langage.
    De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements

    _____
    Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés.

Discussions similaires

  1. Formater une chaine "numérique"
    Par soso78 dans le forum VB.NET
    Réponses: 3
    Dernier message: 02/01/2009, 19h44
  2. Extraction de chaines numériques d'un VARCHAR
    Par Tententai dans le forum SQL
    Réponses: 16
    Dernier message: 25/07/2007, 17h04
  3. Fonction pour une chaine numérique
    Par miya dans le forum VB.NET
    Réponses: 5
    Dernier message: 10/05/2007, 14h21
  4. conversion une chaine numérique en lettre
    Par nazimb dans le forum ASP
    Réponses: 1
    Dernier message: 20/11/2005, 17h39

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