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 :

sprintf "%011d" erreur resultat négatif


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Par défaut sprintf "%011d" erreur resultat négatif
    Bonjour,

    J'ai une chaine de caractéres toto qui peut etre de longeur variable.
    toto=54929379001
    toto=456123
    toto=004566

    Je souhaiterai que ma chaine toto soit au maximum sur 11 caractéres. Si ce n'est pas le cas, alors le caractére "0" s'affiche sur la gauche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $toto = sprintf  "%011d", $toto;
    print ">$NumCompte_Destinataire<\n";
    cette formule fonctionne la ligne 2 et 3, mais dans le cas où ma valeur toto=54929379001, car le resultat est alors le suivant >-0000000001<.

    Par contre si je remplace le 5 par un 0. Alors ça fonctionne de nouveau
    toto=04929379001

    Merci pour votre aide

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Bonjour,

    Exprime toi mieux car je ne comprends rien à ta demande et exemples.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 43
    Par défaut
    bonjour,

    C'est normal que tu obtienne >-0000000001< quand ta valeur vaut 54929379001 parce que tu formate ton résultat dans un entier et un entier est limiter par rapport au système
    Integer -2147483648..2147483647 32 bits signé
    Cardinal 0..4294967295 32 bits non signé

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 43
    Par défaut
    si ce que tu veux faire est d'avoir 0 comme valeur quand ta chaine de caractères est supérieur à 11 sinon tu garde la valeur de ta chaine tu peux faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $toto = sprintf  "%011d", $toto;
    $NumCompte_Destinataire = (length($toto)>11) ? 0 : $toto;
    print ">$NumCompte_Destinataire<\n";

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $toto = sprintf  "%011s", $toto;
    $NumCompte_Destinataire = (length($toto)>11) ? 0 : $toto;
    print ">$NumCompte_Destinataire<\n";

  6. #6
    Membre éclairé
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Par défaut
    j'ai bien compris, sauf que ma chaine n'est pas supérieur à 11, mais égal à 11.

    dois je comprendre que "0" n'est pas une valeur.

  7. #7
    Membre éclairé
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Par défaut
    parfois ma variable fait tout juste 11 caractéres avec un entier 1 2 3 ou 4....
    et c'est là que ça plante.

    En fait je dois formater cette variable pour qu'elle fasse 11 caractéres.
    Si elle l'ai fait à l'origine, je ne touche à rien, sinon je rajoute des "0".

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