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 :

conversion sans exposant


Sujet :

Langage Perl

  1. #1
    Membre habitué Avatar de spirit_epock
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 153
    Points : 173
    Points
    173
    Par défaut conversion sans exposant
    Bonjour tt le monde,
    Soit un nombre flottant ou entier de grande longueur > à 16.
    Je ne veux garder que les 16 premiers chiffres de ma variable $nombre où est contenue ce nombre.
    Je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $long_nombre = length($nombre);
    $i_gard = substr($nombre,-$long_nombre,16)
    Mais perl ne peut s'empêcher de le mettre sous forme d'exposant dans $i_gard.

    Je n'arrive pas à le convertir est un entier pur so help me please.
    Je ne veux plus d'exposant.
    Merci

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Les entiers normaux en Perl vont de -2^31 à 2^31-1 comme dans la plupart des langages.... Donc il est logique que Perl te le convertisse en float (qui peuvent être beaucoup plus grand, mais avec une précision affreuse).
    Pour remédier à ce problème il faut que tu utilises des modules comme BigInt ou BigNum. Lis un peu leur doc pour en savoir plus. (ces modules sont livrés en standard avec Perl)

    --
    Jedaï

  3. #3
    Membre habitué Avatar de spirit_epock
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 153
    Points : 173
    Points
    173
    Par défaut
    ok mais mes données ne seront pas si enormes, de l'ordre de 10 puissance 6
    merci

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    S'il y a 16 chiffres à un entier, ça m'étonnerait qu'il soit de l'ordre de 10^6....

    --
    Jedaï

  5. #5
    Membre habitué Avatar de spirit_epock
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 153
    Points : 173
    Points
    173
    Par défaut
    c exact
    Je voulais dire (10e6)eX ou X varie de 15 à 50
    10e(6+X)

    Thank's

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Points : 208
    Points
    208
    Par défaut
    Salut,
    Citation Envoyé par spirit_epock
    Je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $long_nombre = length($nombre);
    $i_gard = substr($nombre,-$long_nombre,16)
    Pour info (on utilise substr sur des chaînes de caractères):

    quand tu fait length($nombre) en fait tu n'obtiens pas le nombre des chiffres mais la longueur de la chaine 1.222222E+10 qui fait 12 (le . et le + sont comptés).

    Quand tu utilises substr tu peux le faire de la manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $res = substr($var,0,16);#$res va contenir les 16 premières caractères
    donc pas besoin de calculer la longueur.
    Tu peux aussi utiliser la fonction unpack pour extraire les premières 16 caractères
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ($res) = unpack("A16",$var)
    Mais d'abord utilises les modules que Jedai t'a donné ensuite tu vas traiter les résultat comme des châines pour obtenir tes 16 chiffres.

    lami20j

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Points : 208
    Points
    208
    Par défaut
    Désolé,

    lami20j

Discussions similaires

  1. [Débutant][Math] Afficher un nombre sans exposant
    Par tanguy dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 24/09/2012, 13h58
  2. Réponses: 9
    Dernier message: 12/12/2008, 10h38
  3. Nombre format sans exposant
    Par nanourene dans le forum Général Java
    Réponses: 8
    Dernier message: 16/06/2008, 10h41
  4. comment faire la conversion sans perdre d info
    Par tarikmahf dans le forum Langage
    Réponses: 3
    Dernier message: 14/03/2008, 11h35
  5. Conversion sans exposant
    Par rvzip64 dans le forum Delphi
    Réponses: 9
    Dernier message: 25/05/2007, 19h15

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