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 :

Aide pour afficher un float


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut Aide pour afficher un float
    Bonjour, j essaye de faire une petite fonction qui affiche des nombre a virgule..
    J'ai un souci avec les arrondis quelqu un a t il la solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    int     my_putfloat(double f, int precision)
    {
      int   i;
     
      i = f;
      my_put_nbr(f);
      f = f - i;
      my_putchar('.');
      if (f < 0)
        f = f * -1;
      while (precision > 1)
        {
          f = f * 10;
          i = f;
          my_put_nbr(i);
          f = f - i;
          precision--;
        }
      f = f * 10;
      i = f;
      if ((f - i) * 10 >= 5)
          i++;
      my_put_nbr(i);
      return (0);
    }

  2. #2
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Un truce de ce genre?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <stdio.h>
     
    void float2str(double fvalue, int precision,char* strbuf);
    void float2str(double fvalue, int precision,char* strbuf)
    {
        // fvalue    : valeur flottante a convertir
        // precision : precision demandee
        // strbuf    : chaine de reception
        char format[16];
        sprintf(format,"%%0.%if",precision);
        sprintf(strbuf,format,fvalue);
    }
     
    int main(int argc, char** argv)
    {
        char strbuf[256];
        float2str(11.234567890123456,4,strbuf);
        printf(strbuf);
        return 0;
    }
    A+

    Pfeuh

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    @pfeuh : Impossible, ça sent le code Epitech, donc le but est justement de le faire sans le printf...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,
    Citation Envoyé par Médinoc Voir le message
    @pfeuh : Impossible, ça sent le code Epitech, donc le but est justement de le faire sans le printf...
    oula, OK, je sors...

    A+

    Pfeuh

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    Bien vu c un projet epitech, je seche sur cette partie

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Quel est exactement ton soucis avec les arrondis?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Salut,

    Moins de 30 lignes dans le corps de la fonction sans les commentaires, pas mieux en ce qui me concerne. En plus, je ne connais pas règles de codage de cette école, mais je suppose qu'en tapant un hiscore sur l'échelle de Goret, on peut descendre à 10 lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    #include <stdio.h>
     
    void double2output(double fvalue, int precision);
    void double2output(double fvalue, int precision)
    {
        int _cpt = 0;
        int _value;
        char buffer[32];
        // on multiplie le nombre par 10 puissance precision
        while (_cpt++ < precision)
        {
            fvalue *= 10.0;
        }
        // si la valeur est négative, on envoie le signe moins et on inverse
        if(fvalue < 0.0)
        {
            putchar('-');
            fvalue = 0.0 - fvalue;
        }
        // on effectue l'arrondi a l'entier le plus proche
        _value = (int)(fvalue += 0.5);
        // on fabrique une chaine a l'envers avec les restes
        _cpt = 0;
        while(_value)
        {
            buffer[_cpt++] = ((_value % 10) + '0');
            _value = _value / 10;
            if(_cpt == precision)
            {
                buffer[_cpt++] = '.';
            }
        }
        // on envoie la chaine a l'endroit
        while(_cpt--)
        {
            putchar(buffer[_cpt]);
        }
    }
     
    int main(int argc, char** argv)
    {
        double2output(12.3456789,3);
        return 0;
    }
    A+

    Pfeuh

  8. #8
    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 pfeuh Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void double2output(double fvalue, int precision)
    {
        int _cpt = 0;
    Les identificateurs commençant par _ sont réservés à l'implémentation du langage.

  9. #9
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Les identificateurs commençant par _ sont réservés à l'implémentation du langage.
    Ceux commencant par _ et une minuscule ne sont reserves qu'avec une portee de fichier. En general je ne joue pas avec ca (mais des conventions de codage pour el C++ utilisent ce fait, ce qui fait que je l'ai retenu).

  10. #10
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Par défaut
    Ou autrement il existe la methode hardcore qui consiste a tout faire ou presque en manipulation de bit ... (en gros pas de multiplication par 10)

  11. #11
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    @pfeuh : Impossible, ça sent le code Epitech, donc le but est justement de le faire sans le printf...
    L'objectif c'est quoi? D'apprendre a faire des recherches bibliographiques? On va etre mechant et donner la solution: http://portal.acm.org/citation.cfm?id=93559.

  12. #12
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Par défaut
    J'ai envie de dire oui etant donne qu'il a ete oblige de poser la question

    Pour ma part je me contenterais de ca:
    http://fr.wikipedia.org/wiki/IEEE_754

  13. #13
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par daedric Voir le message
    J'ai envie de dire oui etant donne qu'il a ete oblige de poser la question

    Pour ma part je me contenterais de ca:
    http://fr.wikipedia.org/wiki/IEEE_754
    Passer de l'un a l'autre n'est pas trivial. C'est un probleme a donner apres un cours d'analyse numerique, pas pour un cours de programmation.

  14. #14
    Membre expérimenté
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2004
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 230
    Par défaut
    Je sais, je me suis fait tres mal quand je l'ai fais ^^
    j'en porte encore les marques...

    Ceci dit je n'etais pas mecontent du code ^^

    Je le posterais peut etre apres leur rendu si j'y pense ...
    (oui je suis passe par la aussi, sont projet consiste a recoder printf et la gestion des float et des doubles et en bonus)

  15. #15
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par daedric Voir le message
    Je sais, je me suis fait tres mal quand je l'ai fais ^^
    j'en porte encore les marques...

    Ceci dit je n'etais pas mecontent du code ^^

    Je le posterais peut etre apres leur rendu si j'y pense ...
    (oui je suis passe par la aussi, sont projet consiste a recoder printf et la gestion des float et des doubles et en bonus)
    Le papier que je donne indique comment sortir un flottant avec le nombre minimum de chiffres significatifs pour qu'il soit relu sans changement -- probleme d'une difficulte encore superieure et que la libc ne commence pas a aborder (il y a %g en pis aller pour ca). Donc lire 0.1 puis afficher le resultat va donner 0.1.

Discussions similaires

  1. aide pour afficher une image
    Par sindra dans le forum MFC
    Réponses: 12
    Dernier message: 12/06/2008, 11h40
  2. [Tableaux] Aide pour afficher un lien
    Par medmans dans le forum Langage
    Réponses: 2
    Dernier message: 31/07/2007, 18h31
  3. Besoin d'aide pour afficher des resultats proprement
    Par zx10 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 27/11/2006, 16h34
  4. Besoin d'aide pour afficher une image dans un applet
    Par argon dans le forum AWT/Swing
    Réponses: 16
    Dernier message: 19/01/2006, 19h45
  5. Besoin d'aide pour afficher du text dans un applet
    Par argon dans le forum Applets
    Réponses: 2
    Dernier message: 15/01/2006, 21h53

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