conversion float en int sans troncature en c
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

conversion float en int sans troncature en c



  1. #1
    invite153c19c4

    conversion float en int sans troncature en c


    ------

    Bonjour,

    J'essaie actuellement de réaliser en c la conversion d'un float en int car je travaille sur un système ne pouvant pas afficher de float...
    J'ai penser réaliser cette conversion en prenant la partie entière puis la partie décimale:
    Par exemple a=12.57 (un float) --> b= 12 et c= 57 (des int)
    Cependant dans le cas ou j'ai un 0 après la virgule j'ai un problème:
    expl: a=12.0058 --> b=12 et c=58 alors qu'il me faudrait c=0058

    Quelqu'un a t il une idée pour contourner ce problème?

    Merci d'avance

    -----

  2. #2
    invite43901482

    Re : conversion float en int sans troncature en c

    Le cast semble être la solution la plus simple

    Code:
    int main(void)
    {
        float n = 12.0058;
        int ent = (int) n; /* D'ailleurs je crois que c'est inutile de caster là! */
        printf("%d\n", ent);
        return 0;
    }

  3. #3
    invite2d7144a7

    Re : conversion float en int sans troncature en c

    Bonjour,

    Oui, mais ce n'est pas du tout le problème de Zarb1.

    Si c'est seulement pour afficher, et si on dispose de la chaîne représentant la valeur, on peut se passer de ces conversions, sinon, pour la partie décimale, il faut commencer par la garder dans un float, et voir son ordre de grandeur.
    Dans le cas cité, c'est 0.0058, donc 5.8*10-3. À partir de ça, il est facile d'afficher avec le format souhaité.

  4. #4
    invite153c19c4

    Re : conversion float en int sans troncature en c

    Par ta réponse whoami j'en déduis qu'il n'existe pas de fonction prédéfinie récupérant directement les décimales.
    Il faut donc que j'évalue moi même cette partie. Je pense qu'un boucle multipliant par 10 suivi d'une comparaison à 1 peut faire l'affaire.
    Je vais aller coder ça, je vous préviens si je trouve mieux.
    Merci pour les réponses
    et si d'autres idées vous viennent n'hésitez pas

  5. A voir en vidéo sur Futura
  6. #5
    Chanur

    Re : conversion float en int sans troncature en c

    Bonjour,
    Je suis intrigué par le fait que tu ai la fonction printf sans affichage des nombres à virgule flottante. Sans indiscrétion, c'est quel système et quel compilateur ?
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  7. #6
    Jack
    Modérateur

    Re : conversion float en int sans troncature en c

    Où alors, le compilateur ne traite pas le float du tout. J'ai déjà vu cela.

    A+

  8. #7
    invite153c19c4

    Re : conversion float en int sans troncature en c

    C'est pour une utilisation sur une carte de développement avec des micro-contrôleurs. Or dans l'interface avec le PC, la fonction printf n'a pas été réécrite complètement et elle ne gère pas l'affichage de float. Ce qui est bien dommage ^^'

  9. #8
    Jack
    Modérateur

    Re : conversion float en int sans troncature en c

    Or dans l'interface avec le PC, la fonction printf n'a pas été réécrite complètement
    Qu(appelles-tu "l'interface avec le PC" alors que le compilateur n'est sensé générer du code que pour le µC.

    A+

  10. #9
    Dlzlogic

    Re : conversion float en int sans troncature en c

    Bonjour,
    Dans la plupart de mes applications, j'affiche des float sous forme de chaine.
    La manipulation des formats permet cela.
    Pour résoudre l'histoire de(s) 0 entre le point décimal et le premier chiffre non nul, il suffit d'écrire pour votre exemple
    "%d.%04d" et vos valeurs 'b' et 'c'. Naturellement on sait que 'c' est un nombre sur 4 chiffres.
    Il existe des méthodes plus sophistiquées, l'utilisation de l'étoile, mais si c'est un compilateur simplifié, c'est probablement pas prévu.
    Pas de problème pour vous passer la fonction, si ça vous intéresse.

  11. #10
    invite1a308282

    Re : conversion float en int sans troncature en c

    je pense qu'il a du mal a comprendre la différence entre un entier et un réel

  12. #11
    Dlzlogic

    Re : conversion float en int sans troncature en c

    Citation Envoyé par snoosha Voir le message
    je pense qu'il a du mal a comprendre la différence entre un entier et un réel
    Oui, c'est possible, au vu de certaine réponse sur un autre forum.
    Question posée (en gros et de mémoire) quelle est la différence entre un long et un float.
    Réponse (raccourcie, en gros et de mémoire)
    Pour une machine 32 bit, ils occupent la même place, mais avec un float, on a beaucoup plus de possibilités (ie de valeurs différentes).

  13. #12
    invite153c19c4

    Re : conversion float en int sans troncature en c

    Merci Dlzlogic! Effectivement cette méthode est largement suffisante pour mon utilisation. Je n'avais jamais entendu parlé de cette astuce.

    Pour répondre a Jack, j'entends par "interface avec le pc" le logiciel (je ne trouve plus le mot exact désolé) qui interprète les données venant du µC.

Discussions similaires

  1. Utilisation valeurs Réelles sous PIC18 : Float ou Int ?
    Par invite0e0d6f65 dans le forum Électronique
    Réponses: 10
    Dernier message: 27/08/2012, 13h25
  2. Conversion de float sur STM32F4
    Par invite25df009a dans le forum Électronique
    Réponses: 0
    Dernier message: 15/02/2012, 10h38
  3. [C] - Conversion de Float en BCD - Possible ?
    Par invite3c35244f dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 22/12/2010, 09h15
  4. Réponses: 5
    Dernier message: 30/07/2009, 12h57
  5. [C]-Conversion Int -> Char, Float -> Char, ...
    Par invite3c35244f dans le forum Électronique
    Réponses: 2
    Dernier message: 25/06/2008, 11h05