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 :

Question à propos de atof


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 68
    Par défaut Question à propos de atof
    Bonjour,
    J'ai un problème avec l'utilisation de atof (cette fonction permet de transformer une chaine de caractère en float).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    read(connfd, reponse, sizeof(reponse));
    Obj.seuil = atof(reponse);
    Ce code marche très bien j'ai pas de problème ici.

    Mon problème est que la valeur que je récupère est du type : 0.0000000
    alors que je voudrais seulement deux chiffres après la virgule.

    Est ce que quelqu'un sait comment il faut faire???

  2. #2
    Membre émérite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par défaut
    Que vaut réponse ? (fprintf(stderr,"%s\n", reponse)
    Et utilise plutot strtod, il peut te dire si le format est non valide..

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 68
    Par défaut
    reponse varie, c'est l'utilisateur qui saisie sa valeur.
    Mais c'est soit un entier soit un réel.
    reponse est de type char[255];

    Il existe pas une option pour formater le float comme on veut comme quand on utilise scanf par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    scanf("%.2f", float);
    Merci.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 68
    Par défaut
    La fonction atof() est maintenant le plus souvent remplacée par strtod(). Pour arrondir à deux décimales, il te suffit de convertir en doucle, multiplier par 100, arrondir à l'entier le plus proche puis diviser une nouvelle fois par 100.
    Ca doit quoi comme code stp?? Comment on fait pour arrondir à l'entier le plus proche??

    Merci.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 68
    Par défaut
    En fait c'est bon.
    Je stocke quand même les float dans mon fichier sous la forme 0.0000000, car scanf se débrouille tout seul pour récupérer seulement deux chiffres après la virgule (à l'aide de %.2f).

    Merci a tous.

    C'est pas vraiment résolu, est ce que je clique quand même sur résolu??

  6. #6
    Membre émérite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par défaut
    Citation Envoyé par Bebert71
    Il existe pas une option pour formater le float comme on veut comme quand on utilise scanf par exemple :
    Si, tu vas rire (enfin j'epère)
    Rq: l'arrondi est géré par printf...

  7. #7
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par D[r]eadLock
    Si, tu vas rire (enfin j'epère)
    Rq: l'arrondi est géré par printf...
    J'avais compris la question dans l'autre sens... Voilà pourquoi je n'en percevais pas l'intérêt.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  8. #8
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Salut,

    La fonction atof() est maintenant le plus souvent remplacée par strtod(). Pour arrondir à deux décimales, il te suffit de convertir en double avec strtod, multiplier par 100, arrondir à l'entier le plus proche puis diviser une nouvelle fois par 100. Lorsqu'il s'agit d'affichage, je comprend l'intérêt de limiter le nombre de chiffres significatifs, mais dans ton cas de conversion chaîne de caractère -> nombre flottant, je ne vois pas l'intérêt de perdre de la précision sur les calculs.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Bebert71
    Mon problème est que la valeur que je récupère est du type : 0.0000000
    alors que je voudrais seulement deux chiffres après la virgule.
    Non. La valeur que tu récupères est une séquence de bits qui encodent une valeur en virgule flottante au format Signe/Mantisse/Exposant.

    Ce dont tu parles, c'est probablement d'une représentation textuelle par printf() ou un des frères.

    Si c'est ça, il faut apprendre à utiliser les formateurs de printf() : "%.2f", par exemple...

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 68
    Par défaut
    Merci D[r]eadLock , je savais pas si ca marchait aussi avec le printf.

    Encore merci à tous.

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

Discussions similaires

  1. Question à propos des compilateurs
    Par elf dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 20/07/2005, 17h00
  2. Question à propos des niveaux de transaction
    Par davy.g dans le forum Oracle
    Réponses: 3
    Dernier message: 18/01/2005, 15h31
  3. Petite question à propos du redbook...
    Par Michaël dans le forum OpenGL
    Réponses: 3
    Dernier message: 04/11/2004, 12h54
  4. Petite question à propos d'une requete
    Par ViBy dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/09/2004, 12h21
  5. Une question à propos des thread
    Par tscoops dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/11/2003, 14h03

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