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 :

convertir un float en 2 int ?


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 12
    Points : 3
    Points
    3
    Par défaut convertir un float en 2 int ?
    Bonjours,

    j'aimerais convertir un float en 2 int, j'ai essayer d'utiliser les cast ... la ce code marche pour uniquement 2 chiffre apres la virgule ... et encore sa depend des architecture ... merci de votre aide !

    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
     
    #include <unistd.h>                                                                        
    #include "fct.h"                                                                           
     
    void                    floats(double f)                                                   
    {                                                                                          
      int                   nbe;                                                               
      double                test;                                                              
      int                   nbv;                                                               
      int                   k;                                                                 
     
      nbe = (int)f;                                                                            
      my_put_nbr(nbe);                                                                         
      write(1, ".", 1);                                                                        
      test = f - (double)nbe;                                                                  
      k = compt(test);                                                                         
      while (k != 0)                                                                           
        {                                                                                      
        test = test * 10;                                                                      
        k--;                                                                                   
        }                                                                                      
      nbv = (int)test;                                                                         
      nbv++;                                                                                   
      my_put_nbr(nbv);                                                                         
    }                                                                                          
     
    int             compt(double n)                                                            
    {                                                                                          
      int           i;                                                                         
     
      i = 0;                                                                                   
      while (n < 10)                                                                           
        {                                                                                      
          n = n * 10;                                                                          
          i++;                                                                                 
        }                                                                                      
      return (i);                                                                              
    }

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    admettons que la valeur ne provoque pas de dépassements (ce qui sera rarement le cas)..

    Il s'agit simplement d'arithmétique simple :

    réel = partie entière + partie décimale


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    float f=123.47893 ;
    int   partie_entiere, partie_decimale ;
     
    partie_entiere = (int)f ;
    partie_decimale = (int)((f - (float)partie-entiere) * nombre_de_chiffres_apres_virgule);
    Après, diverses manièeres permettent d'obtenir le nombre de chiffres après la virgule : fixé par l'utilisateur, calculé automatiquement, etc...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    nan c est justement ce nombre de chiffres apres la virgule que j arrive pas a trouver

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    ben c'est à toi de le préciser sous une forme ou une autre , comme je l'ai dit ..

    En général, c'est en se fixant une limite : N chiffres après la virgule, ou x% de précision (donc précision relative)..

    Ce que tu n'as pas l'air de comprendre, c'est qu'en arithmétique un nombre réel a une infinité de chiffres après la virgule...

    Alors ensuite tu as 2 limites :

    • celle de l'ordinateur : comment il stocke en fonction de son modèle de représentation d'un réel (mantisse+exposant) (la norme C , sur un 32-bits, donne quelque chose comme 10^-17)
    • celle de l'utilisateur : ce qu'il veut voir


    En dehors de ça, mathématiquement, cela n'a aucun sens (sauf pour les réels correspondants à un entier) d'avoir un nombre de chiffres après la virgule "intrinsèque"...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 12
    Points : 3
    Points
    3
    Par défaut
    merci de ta reponse sa m avance bien !

Discussions similaires

  1. [Xpath] Convertir un float en int
    Par cinou01 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 22/11/2010, 10h44
  2. Convertir un Float en string
    Par Oberown dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/04/2008, 09h42
  3. convertir un float vers un string..
    Par zodd dans le forum C
    Réponses: 9
    Dernier message: 01/12/2006, 22h33
  4. Convertir une chaine quelconque en int
    Par PaladinFr dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 25/11/2006, 14h48
  5. [C#] convertir un nombre hexa en int
    Par linux dans le forum C#
    Réponses: 5
    Dernier message: 08/12/2005, 16h38

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