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

C++ Discussion :

long int VS double


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 2
    Par défaut long int VS double
    Bonjour a tous,

    J'ai une petite question a poser concernant une conversion eventuelle de double vers long int.
    Voila mon soucis: je lis dans un fichier des entiers entre 1 et 6 555 600 qui me serviront par la suite comme indices pour un vecteur.
    Ces entiers sont un par un stockes dans la chaine de charactere tmp qu'ensuite je veux convertir en entier:

    long int x = atol(tmp);

    Le probleme ici c'est que lorsque tmp represente 100 000, 200 000, etc. x vaut alors 1, 2, etc... .

    Lorsque je fais:

    cout<<x<<"\t"<<tmp<<"\n"; le programme m'affiche:

    1 1
    1 1e+05
    2 2e+05 ....

    Alors, j'ai essayé de faire la meme chose en considerant tmp comme un double et la ca marche avec:

    double x = strtod(tmp, NULL);

    Comme x represente un indice dans un vecteur, je souhaiterai donc l'avoir sous forme d'entier mais lorsque je fais

    x = (long int)x;

    Le programme me met des warnings

    Une suggestion sur la maniere de resoudre cette enigme?
    Pourquoi 1e+05 n'est pas considere comme un long int??

    Merci d'avance pour votre aide.

    Naira

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    double x = strtod(tmp, NULL);

    Comme x represente un indice dans un vecteur, je souhaiterai donc l'avoir sous forme d'entier mais lorsque je fais

    x = (long int)x;

    Le programme me met des warnings
    Normal, tu viens de déclarer x comme étant un double, le résultat de la conversion en long doit donc être stocké dans une autre variable d'un autre type.

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    1e+05 est une représentation scientifique. La lecture des représentations scientifique n'est supportée que par les float et double.
    La lecture d'un entier va s'arreter au premier caractère non numérique, (donc le E).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    long x;
    x= (long) strtod(tmp,0);
    Devrait néanmoins marcher...

    Maintenant... on peut voir le "bug" dans l'autre sens, comment se fait-il qu'un programme qui écrit des indices (donc le fichier que tu lis) écrive des inepties genre 1e+5 !

  4. #4
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 2
    Par défaut
    Citation Envoyé par nicroman
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    long x;
    x= (long) strtod(tmp,0);
    Devrait néanmoins marcher...
    Oui ceci marche parfaitement sans warnings Merci beaucoup

    Maintenant... on peut voir le "bug" dans l'autre sens, comment se fait-il qu'un programme qui écrit des indices (donc le fichier que tu lis) écrive des inepties genre 1e+5 !

    Par contre la je ne comprends absolument pas pourquoi ce bug existe...
    Bizarre de lire un string representant un grand nombre et lors de l'affichage voir ce meme string en representation scientifique

Discussions similaires

  1. [Conversion]int to double
    Par frouge dans le forum Général Java
    Réponses: 6
    Dernier message: 03/02/2012, 09h34
  2. double, long, int
    Par ChPr dans le forum Langage
    Réponses: 3
    Dernier message: 23/04/2007, 10h06
  3. int vs double: qui est le plus rapide?
    Par Chewbi dans le forum C++
    Réponses: 23
    Dernier message: 25/03/2006, 02h58
  4. décallage sur long long int
    Par trax44 dans le forum C
    Réponses: 9
    Dernier message: 26/02/2006, 11h41
  5. calcul melangeant int et long int ?
    Par ThR dans le forum C
    Réponses: 2
    Dernier message: 06/01/2003, 01h13

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