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 :

Comment enlever les zeros inutiles d'un float


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Comment enlever les zeros inutiles d'un float
    Bonjour, j'aimerais coder une fonction qui m'enleve les 0 inutiles a la fin d'un float ou plus precisement, j'aimerais afficher les 3 premiers caracteres de mon float, mais je vois pas trop comment fairem a part mettre le floart dans un tableau et n'afficher que les 3 premieres cases du tableau.

    Une autre question pendant que j'y suis, j'ai un autre soucis, en fait j'ouvre un dossier avec opendir, je liste les fichiers avec readdir jusque la tout foncionne, mais j'aimerais avoir la liste de fichier par ordre ASCII, donc du plus petit nombre ASCII au plus grand, et la aussi je vois pas trop comment faire.

    Merci d'avance.

  2. #2
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Skorpyon69
    j'aimerais afficher les 3 premiers caracteres de mon float,
    C'est écrit dans ton livre de C : printf() avec "%.0f"

  3. #3
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Avant : 2.749000

    Apres : 2.754000


  4. #4
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par Skorpyon69
    Une autre question pendant que j'y suis, j'ai un autre soucis, en fait j'ouvre un dossier avec opendir, je liste les fichiers avec readdir jusque la tout foncionne, mais j'aimerais avoir la liste de fichier par ordre ASCII, donc du plus petit nombre ASCII au plus grand, et la aussi je vois pas trop comment faire.
    Tu peux par exemple les stocker dans un tableau pour les trier...

  5. #5
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par Skorpyon69
    Avant : 2.749000

    Apres : 2.754000

    Un petit extrait du man de printf :
    Citation Envoyé par man
    Pour afficher avec cinq décimales :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        #include <math.h>
        #include <stdio.h>
        fprintf (stdout, "pi = %.5f\n", 4 * atan (1.0));

  6. #6
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Oui mais en fait je n'ai pas le droit d'utiliser fprintf, c'est pour cela que je cherchais une idee de fonction a coder pour ce genre de chose.

  7. #7
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par Skorpyon69
    Oui mais en fait je n'ai pas le droit d'utiliser fprintf, c'est pour cela que je cherchais une idee de fonction a coder pour ce genre de chose.
    Utilises printf tout court alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("pi = %.5f\n", 4 * atan (1.0));
    Si tu dois afficher ton float, je suppose que tu as le droit d'utiliser printf.

  8. #8
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Printf oui ( et encore, c'est une fonction my_printf que j'ai moi meme recoder) mais atan non =/

  9. #9
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par Skorpyon69
    Printf oui ( et encore, c'est une fonction my_printf que j'ai moi meme recoder) mais atan non =/
    Attends... faut pas utiliser tel quel le code des exemples du man, faut les adapter à ton problème !
    Tu as juste besoin de printf, toi !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%.3f", 2.749000);

  10. #10
    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 : 47
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par zooro
    Utilises printf tout court alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("pi = %.5f\n", 4 * atan (1.0));
    Si tu dois afficher ton float, je suppose que tu as le droit d'utiliser printf.
    Si il n'a pas le droit d'utiliser fprintf, j'imagine qu'il n'a pas le droit d'utiliser prinf non plus.

    Thierry

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    mais je vois pas trop comment fairem a part mettre le floart dans un tableau et n'afficher que les 3 premieres cases du tableau.
    si tu met un float dans un tableau il sera placé dans une "case" et non pas un chiffre par "case".

    manuel

  12. #12
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Citation Envoyé par mujigka
    Si il n'a pas le droit d'utiliser fprintf, j'imagine qu'il n'a pas le droit d'utiliser prinf non plus.
    Comment va-t-il faire, alors, pour afficher son flottant ?

  13. #13
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par zooro
    Comment va-t-il faire, alors, pour afficher son flottant ?
    Tout le problème est là. Il faut construire une chaine de caractères représentant le flottant en décimal et afficher la chaine caractères par caractères avec une fonction primaire genre fputc(c, stdout) ou putchar(c).

    Ca doit encore être un machin de l'ESIEE. (Mais je ne critique pas, car je trouve intéressant de fabriquer ses fonctions avec des moyens réduits en phase d'apprentissage...).

    Pour le cas qui nous intéresse, je pense qu'il faut faire une décomposition en puissance de 10 par divisions successives...

  14. #14
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    J'ai ca pour afficher mes floats en fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void		print_float(double n)
    {
      int		a;
      int		b;
     
      a = n;
      b = (n - a) * 1000000;
      my_put_nbr(a);
      my_putchar('.');
      my_put_nbr(b);
    }

  15. #15
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 705
    Points
    705
    Par défaut
    Citation Envoyé par Skorpyon69
    J'ai ca pour afficher mes floats en fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      b = (n - a) * 1000000;
    Elle sert à quoi cette ligne ?
    b vaut toujours 0 puisque tu as mis à la ligne au dessus a = n ...

    Et la fonction "my_put_nbr()" que fait-elle exactement ?

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Fabllot : a est un int, et contient donc la partie entière de n...

    Skorpyon69: J'ai bien peur qu'il te faille passer par un buffer pour la partie décimale. Écrire le nombre dans ce buffer, puis filer à la fin et remonter en remplaçant tous les zéros trouvés par \0...

  17. #17
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Elle affiche un nombre.

  18. #18
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Bon j'ai reussit a resoudre mon probleme en modifiant ma fonction print_float

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void		print_float(double n)
    {
      int		a;
      int		b;
     
      a = n;
      b = (n - a) * 10;
      my_put_nbr(a);
      my_putchar('.');
      my_put_nbr(b);
    }
    Je reviens donc a ma 2eme question :

    Citation Envoyé par Skorpyon69
    Une autre question pendant que j'y suis, j'ai un autre soucis, en fait j'ouvre un dossier avec opendir, je liste les fichiers avec readdir jusque la tout foncionne, mais j'aimerais avoir la liste de fichier par ordre ASCII, donc du plus petit nombre ASCII au plus grand, et la aussi je vois pas trop comment faire.

  19. #19
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Skorpyon69
    Je reviens donc a ma 2eme question :
    Soit tu mets les informations (stat) dans un tableau que tu tries (qsort()) avant d'afficher,

    soit tu places les informations dans une liste chainée que tu tries au fur et à mesure par tri-insersion. Ensuite, tu affiches la liste.

Discussions similaires

  1. comment enlever les chemin dans l url
    Par chouchou93 dans le forum Struts 1
    Réponses: 5
    Dernier message: 13/06/2006, 16h52
  2. Réponses: 6
    Dernier message: 23/05/2006, 16h59
  3. Enlever les services inutiles ?
    Par Michaël dans le forum Sécurité
    Réponses: 6
    Dernier message: 25/10/2005, 17h12
  4. Enlever les espaces inutiles d'un AnsiString
    Par jamesb dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/01/2005, 13h40
  5. [DBGRID] Comment enlever les ascenseurs H et V
    Par kase74 dans le forum Bases de données
    Réponses: 6
    Dernier message: 16/09/2004, 19h33

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