Partage
  • Partager sur Facebook
  • Partager sur Twitter

Transformer entier en décimal

    29 décembre 2005 à 19:08:19

    Voilà, j'ai presque fini ma calculette (ouais super xD) mais j'ai un dernier problème : comment je peux faire en sorte que le nombre entré par l'utilisateur soit converti en nombre décimal ?
    Exemple :
    L'utilisateur entre le nombre 74, ensuite on le converti en 74.0
    • Partager sur Facebook
    • Partager sur Twitter
      29 décembre 2005 à 19:10:28

      ben tu met un double et il y auras plusieurs zéro derière...
      • Partager sur Facebook
      • Partager sur Twitter
        29 décembre 2005 à 19:16:49

        Il suffit de le cast en float :
        int iTaVar
        // scanf() ou autre..
        float fTaVar = (float)iTaVar
        // Ton code continue..
        • Partager sur Facebook
        • Partager sur Twitter
          29 décembre 2005 à 19:46:52

          Citation : tif-tof

          Il suffit de le cast en float :

          int iTaVar
          // scanf() ou autre..
          float fTaVar = (float)iTaVar
          // Ton code continue..


          Tu te casse le culk pour rien...

          tu met une variable double est si le nombre est un entier, le nombre sera converti comme 7.000000

          ++
          W!nn!3
          • Partager sur Facebook
          • Partager sur Twitter
            29 décembre 2005 à 20:12:31

            Oui mais moi je fais comme il a dit :p
            Et aussi : double a beau etre d'une plus grande capacité, les calculs avec ce type de variable sont très imprecis. Prefère float voir int si tu ne manipule que des entier

            ++
            Tiftof
            • Partager sur Facebook
            • Partager sur Twitter
              30 décembre 2005 à 0:46:33

              Citation : tif-tof

              les calculs avec ce type de variable sont très imprecis.f


              tu as un exemple?
              Parce que moi j'ai toujours eu la même précision pour les int que les doubles (disons même que les doubles sont plus précis vu qu'ils ne tronquent pas les résultats, ce qui arrive souvent lors de divisions lorsqu'on utilise des entiers)
              • Partager sur Facebook
              • Partager sur Twitter
                30 décembre 2005 à 1:34:58

                Citation : BoudBoulMan

                Citation : tif-tof

                les calculs avec ce type de variable sont très imprecis.f


                tu as un exemple?
                Parce que moi j'ai toujours eu la même précision pour les int que les doubles (disons même que les doubles sont plus précis vu qu'ils ne tronquent pas les résultats, ce qui arrive souvent lors de divisions lorsqu'on utilise des entiers)



                La valeur d'une variable double n'est qu'aproximative à cause de sa représentation en binaire.

                Un exemple :

                   double nombre = 1e25;
                   
                   nombre++;
                   if (nombre != 1e25)
                      printf("La valeur de la variable est differente.\n");
                   else
                      printf("La valeur de la variable est la meme.\n");


                Logiquement, le texte "La valeur de la variable est differente." devrait être affiché, mais en compilant ce n'est pas le cas pourtant la variable a été incrémentée.

                Un autre exemple :


                   if (0.1 + 0.2 != 0.3)
                      printf("le calcul est faux\n");
                • Partager sur Facebook
                • Partager sur Twitter
                  30 décembre 2005 à 6:02:43

                  Hmm je viens apporter mon grain de sel : il me semble que double c 'est encore plus précis qu'un float...
                  un peu comme LONG c'est plus grand qu'un INT.
                  Voilou :)
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    30 décembre 2005 à 9:35:04

                    Citation : ionix

                    Hmm je viens apporter mon grain de sel : il me semble que double c 'est encore plus précis qu'un float...
                    un peu comme LONG c'est plus grand qu'un INT.
                    Voilou :)


                    Il y a encore plus grand sinon: long double qui fait 10 octets (ou 8 je sais plus)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 décembre 2005 à 11:48:34

                      Citation : Araya

                      Un exemple :

                         double nombre = 1e25;
                         
                         nombre++;
                         if (nombre != 1e25)
                            printf("La valeur de la variable est differente.\n");
                         else
                            printf("La valeur de la variable est la meme.\n");



                      Logiquement, le texte "La valeur de la variable est differente." devrait être affiché, mais en compilant ce n'est pas le cas pourtant la variable a été incrémentée.

                      Un autre exemple :


                         if (0.1 + 0.2 != 0.3)
                            printf("le calcul est faux\n");


                      C'est exact ^^ , donc ne manipulez des double que si nécessaire :p

                      Merci beaucoup pour ton explication :)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 décembre 2005 à 11:57:23

                        @ionix : Pour double plus precis que float : faux.
                        double permet de faire tenir dedans de très grand nombre, fesant provoquer des erreurs comme l'a montré araya :)

                        Sinon, la taille en octets de chaque type depend de l'ordinateur que l'on a. (sizeof(<type>) pour savoir la taille d'un variable (octets))
                        Faire un sizeof(long double) me donne 8 octets, alors que chez certain sa pourrait faire 10 ^^

                        ++
                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 octobre 2006 à 8:17:07

                          hum bonjour a tous :)
                          je voudrai revenir sur le sujet
                          si j'ai un entier dans une variable et que je veut passé cette entier en decimal dans une autre variable ... o_O


                          long resultat = 0, nombre1 = 0; //déclare les variables
                          double taille = 0, imc2 = 0, imc= 0, nombre2 = 0;
                          printf("IMC :\n\n");
                          printf("taper votre poid ( en Kg )\n");
                          scanf("%ld", &nombre1);
                          printf("\nTapez Votre Taille ( en Centimetre ) \n");
                          scanf("%ld", &nombre2);
                          taille = nombre2 / 100.0; // taille en metres
                          imc2 = pow(taille, 2); // taille au carré
                          imc = nombre1 / imc2; // poid divisé par taille²
                          printf("\n\n\n%ld ", imc);
                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 octobre 2006 à 8:21:40

                            Citation : ange-dechu

                            je voudrai revenir sur le sujet
                            si j'ai un entier dans une variable et que je veut passé cette entier en decimal dans une autre variable ...


                            Il n'y a pas de 'décimal' en C. Il y a les entiers et il y a les flottants.

                            L'opérateur d'affectation (=) fait la conversion automatiquement :
                            int x = 74; /* entier */
                            double y = x; /* flottant */

                            C'est tout.
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Music only !
                              23 octobre 2006 à 8:26:49

                              j'ai pas tous saisi :-/ j'ai debuter hier soir ...
                              • Partager sur Facebook
                              • Partager sur Twitter
                                23 octobre 2006 à 9:22:29

                                Citation : ange-dechu

                                j'ai pas tous saisi :-/ j'ai debuter hier soir ...


                                Et ? On est censés deviner ce que tu n'as pas compris ? Si tu ne poses pas des questions précises, on ne peut pas te répondre sérieusement.

                                Au bout d'une journée, tu veux déjà manipuler des flottants ? Tu suis quel livre ou tutoriel ?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Music only !
                                  23 octobre 2006 à 9:32:57

                                  heu bah je suit le tutoriel de M@teo21 j'en suis au if...else . se que j'ai pas compris c'est que mon code coinse ici :
                                  scanf("%ld", &nombre2);
                                  taille = nombre2 / 100.0; // taille en metres


                                  j'aurais voulut savoir pk :(
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    23 octobre 2006 à 10:02:56

                                    Citation : ange-dechu

                                    heu bah je suit le tutoriel de M@teo21 j'en suis au if...else . se que j'ai pas compris c'est que mon code coinse ici :

                                    scanf("%ld", &nombre2);
                                    taille = nombre2 / 100.0; // taille en metres



                                    Etant donné qu'on ne sait pas comment tu as défini nombre2 et taille, difficile d'en dire plus. Et "mon code coinse ici" ça veut dire quoi au juste ?

                                    Si tu n'expliques pas exactement quel est ton problème, on ne peut pas te répondre... Il faut aussi qu'on ait tous les élements (poste le code complet).

                                    (j'ai un peu l'impression de me répéter, non ?)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Music only !
                                      23 octobre 2006 à 10:13:47

                                      le code complet est juste au dessus de toi sur mon premier post :) et difficile de m'expliqué sur mon probleme vu que je ne vois pas se qui coinse :-/
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        23 octobre 2006 à 10:34:11

                                        Citation : ionix

                                        Hmm je viens apporter mon grain de sel : il me semble que double c 'est encore plus précis qu'un float...
                                        un peu comme LONG c'est plus grand qu'un INT.
                                        Voilou :)



                                        Mhh ceci dépend de l'implémentation. En tout cas, chez moi un long est codé sur 4 octets pareillement qu'un int.

                                        ange-dechu -> Tu utilises le code de format "%ld" dans ton deuxième scanf. Celui ci attend donc l'adresse d'un long or tu lui passes l'adresse d'un double, il y a donc incompatibilité dans les types. Il faut utiliser "%lf" pour un me semble t-il.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          23 octobre 2006 à 10:47:21

                                          j'y est penssé mais apres sa me renvoie un nombre assé grand qui na rien a voir
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            23 octobre 2006 à 11:46:19

                                            Citation : ange-dechu

                                            le code complet est juste au dessus de toi sur mon premier post :) et difficile de m'expliqué sur mon probleme vu que je ne vois pas se qui coinse :-/


                                            Ah, celui-là ?. Effectivement, ça coince pas mal !

                                            Project : Forums
                                            Compiler : GNU GCC Compiler (called directly)
                                            Directory : C:devforums2
                                            --------------------------------------------------------------------------------
                                            Switching to target: default
                                            Compiling: main.c
                                            main.c:3: error: syntax error before string constant
                                            main.c:3: warning: type defaults to `int' in declaration of `printf'
                                            main.c:3: warning: conflicting types for built-in function 'printf'
                                            main.c:3: warning: data definition has no type or storage class
                                            main.c:4: error: syntax error before string constant
                                            main.c:4: warning: type defaults to `int' in declaration of `printf'
                                            main.c:4: warning: data definition has no type or storage class
                                            main.c:5: error: syntax error before string constant
                                            main.c:5: warning: type defaults to `int' in declaration of `scanf'
                                            main.c:5: warning: conflicting types for built-in function 'scanf'
                                            main.c:5: warning: data definition has no type or storage class
                                            main.c:6: error: syntax error before string constant
                                            main.c:6: warning: type defaults to `int' in declaration of `printf'
                                            main.c:6: warning: data definition has no type or storage class
                                            main.c:7: error: syntax error before string constant
                                            main.c:7: warning: type defaults to `int' in declaration of `scanf'
                                            main.c:7: warning: data definition has no type or storage class
                                            main.c:8: warning: type defaults to `int' in declaration of `taille'
                                            main.c:8: error: conflicting types for 'taille'
                                            main.c:2: error: previous definition of 'taille' was here
                                            main.c:8: error: initializer element is not constant
                                            main.c:8: warning: data definition has no type or storage class
                                            main.c:9: warning: type defaults to `int' in declaration of `imc2'
                                            main.c:9: error: conflicting types for 'imc2'
                                            main.c:2: error: previous definition of 'imc2' was here
                                            main.c:9: warning: implicit declaration of function `pow'
                                            main.c:9: error: initializer element is not constant
                                            main.c:9: warning: data definition has no type or storage class
                                            main.c:10: warning: type defaults to `int' in declaration of `imc'
                                            main.c:10: error: conflicting types for 'imc'
                                            main.c:2: error: previous definition of 'imc' was here
                                            main.c:10: error: initializer element is not constant
                                            main.c:10: warning: data definition has no type or storage class
                                            main.c:11: error: syntax error before string constant
                                            main.c:11: warning: type defaults to `int' in declaration of `printf'
                                            main.c:11: warning: data definition has no type or storage class
                                            main.c:11:27: warning: no newline at end of file
                                            Process terminated with status 1 (0 minutes, 4 seconds)
                                            15 errors, 22 warnings

                                            Une fois complété :

                                            /* -ed- poster du code complet sinon,
                                            on ne sait pas ce que tu as oublie reellement */


                                            #include <stdio.h>
                                            #include <math.h>

                                            int main (void)
                                            {
                                               long resultat = 0, nombre1 = 0; //déclare les variables
                                               double taille = 0, imc2 = 0, imc = 0, nombre2 = 0;
                                               printf("IMC :\n\n");
                                               printf("taper votre poid ( en Kg )\n");
                                               scanf("%ld", &nombre1);
                                               printf("\nTapez Votre Taille ( en Centimetre ) \n");
                                               scanf("%ld", &nombre2);
                                               taille = nombre2 / 100.0; // taille en metres
                                               imc2 = pow(taille, 2); // taille au carré
                                               imc = nombre1 / imc2; // poid divisé par taille^2
                                               printf("\n\n\n%ld ", imc);

                                               return 0;
                                            }

                                            Il y a encore quelques problèmes :
                                            Project : Forums
                                            Compiler : GNU GCC Compiler (called directly)
                                            Directory : C:devforums2
                                            --------------------------------------------------------------------------------
                                            Switching to target: default
                                            Compiling: main.c
                                            main.c: In function `main':
                                            main.c:14: warning: long int format, double arg (arg 2)
                                            main.c:18: warning: long int format, double arg (arg 2)
                                            main.c:8: warning: unused variable `resultat'
                                            Linking console executable: C:devforums2console.exe
                                            Process terminated with status 0 (0 minutes, 1 seconds)
                                            0 errors, 3 warnings


                                            Il faudrait déjà corriger ça. Je rappelle que "%ld" c'est pour les long int et "%lf" pour les double.

                                            Une fois corrigé, ça fonctionne. Je conseille de donner aux variables un nom clair...

                                            #include <stdio.h>
                                            #include <math.h>

                                            int main (void)
                                            {
                                               long poids = 0; //déclare les variables
                                               double taille_m = 0, taille_m_2 = 0, imc = 0, taille_cm = 0;

                                               printf("IMC :\n\n");
                                               printf("taper votre poid (en Kg)\n");
                                               scanf("%ld", &poids);
                                               printf("\nTapez Votre Taille (en Centimetre)\n");
                                               scanf("%lf", &taille_cm);
                                               taille_m = taille_cm / 100.0; // taille en metres
                                               taille_m_2 = pow(taille_m, 2); // taille au carré
                                               imc = poids / taille_m_2; // poid divisé par taille
                                               printf("\n\nvotre IMC est de %lf \n", imc);

                                               return 0;
                                            }

                                            Personnellement, je préfère définir mes variables au fur et a mesure des besoins et leur attribuer une portée limitée à l'essentiel. Je coderais donc comme ceci :
                                            #include <stdio.h>
                                            #include <math.h>

                                            int main (void)
                                            {
                                               double poids = 0;
                                               long taille_cm = 0;

                                               printf("Calcluez votre IMC\n\n");

                                               printf("taper votre poid (en Kg)\n");
                                               scanf("%lf", &poids);

                                               printf("\nTapez Votre Taille (en Centimetre)\n");
                                               scanf("%ld", &taille_cm);

                                               {
                                                  double taille_m = taille_cm / 100.0; // taille en metres
                                                  double taille_m_2 = pow(taille_m, 2); // taille au carré
                                                  double imc = poids / taille_m_2; // poid divisé par taille
                                                  printf("\n\nvotre IMC est de %lf \n", imc);
                                               }
                                               return 0;
                                            }
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Music only !
                                              23 octobre 2006 à 18:35:06

                                              j'ai pas reussi a copier mon code entier ...
                                              en tous cas merci c'est ce que je chercher ^^
                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Transformer entier en décimal

                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                              • Editeur
                                              • Markdown