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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 12
    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 confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    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...

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

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

  4. #4
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    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"...

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

    Informations forums :
    Inscription : Octobre 2009
    Messages : 12
    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