Conversion de dollars en cents
On février 14, 2021 by adminJessaie dutiliser la fonction round pour passer de dollars en cents, mais je crois quil y a quelque chose à propos de la fonction round que jai mal compris, car je nobtiens tout simplement pas les décimales avec moi lorsque je multiplie par 100 du flottant à un int. Cest le code en question
#include <stdio.h> #include <cs50.h> #include <math.h> int main(void) { int owed = 0; printf("Enter the owed amount: "); do { owed = GetFloat(); } while (owed < 0); owed = owed * 100.0; float owe = roundf(owed); owe = (int)owe;
Commentaires
- i wasn ' Je ne sais pas comment larrondir Jétais en train dutiliser round () pas roundf () pourriez-vous me lexpliquer sil vous plaît
Réponse
Le principal problème est de savoir comment vous stockez la valeur initiale récupérée. Vous appelez GetFloat()
et enregistrez le résultat dans owed
, une variable de type int. GetFloat () renvoie un nombre à virgule flottante, qui sera implicitement converti en un entier lorsque vous essayez de le stocker dans dû. Dans le processus, la partie de la virgule décimale sera tronquée. Cela signifie que vous pouvez essayer de stocker 4,85 toute la journée et quil sera toujours stocké sous forme dentier 4.
Vous devez stocker la valeur renvoyée par GetFloat () dans une variable float, pas un int. Plus tard, multipliez par 100 et arrondissez et puis stockez-le dans un int, comme vous essayez de le faire.
En guise de remarque, les dernières lignes, pendant quelles fonctionneront , ne sont pas terriblement propres. Vous créez un nouveau float pour modifier ce qui devrait être un autre float et stocker le résultat, et sur la ligne suivante, transtypez un float en int et stockez le int dans un float. Cela aurait plus de sens pour arrondir le flotteur et le ranger dans le même flotteur, mais à la ligne suivante pour lancer le flotteur comme un int et le stocker dans une nouvelle variable int. Ou, une chose plus propre serait de tout faire sur une seule ligne: int change = roundf(dollars*100);
Si cela répond à votre question, veuillez cliquer sur la coche pour accepter. Continuons la maintenance du forum. 😉
Commentaires
- Comment pourrais-je manquer ça? Merci beaucoup. Mon code a fini par avoir lair terrible après 3 heures de bricolage avec la fonction round, je ne peux ' croire que je pourrais faire une erreur aussi stupide;)
- Cest peut-être moi qui suis très difficile, mais vous devriez rester à lécart de la Diffusion implicite et toujours utiliser la Diffusion explicite cela rend beaucoup plus évident pour le compilateur ainsi que pour les futurs programmeurs ce que vous essayez de faire réellement. Cest une très bonne habitude de commencer tôt dans votre programmation car ce sera une seconde nature et vous épargnera beaucoup de maux de tête (et créer un bien meilleur code). int change = (int) (roundf (dollars * 100));
Laisser un commentaire