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
    Zarb1

    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
    fred1599

    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;
    }
    Dernière modification par fred1599 ; 26/01/2013 à 13h46.

  3. #3
    whoami

    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
    Zarb1

    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
    Zarb1

    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
    snoosha

    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
    Zarb1

    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 denver60 dans le forum Électronique
    Réponses: 10
    Dernier message: 27/08/2012, 13h25
  2. Conversion de float sur STM32F4
    Par kronanberg dans le forum Électronique
    Réponses: 0
    Dernier message: 15/02/2012, 10h38
  3. [C] - Conversion de Float en BCD - Possible ?
    Par jorg1n 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 jorg1n dans le forum Électronique
    Réponses: 2
    Dernier message: 25/06/2008, 11h05