Conversia de la dolari la cenți
On februarie 14, 2021 by adminÎncerc să folosesc funcția rotundă pentru a merge de la dolari la cenți, dar cred că există ceva despre funcția rotundă pe care o am neînțeles, pentru că pur și simplu nu primesc zecimale la mine când mă înmulțesc cu 100 de la plutitor la un int. Acesta este codul în cauză
#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;
Comentarii
- Nu eram ' Nu știu cum să-l rotunjesc, am apelat la round () nu roundf () ați putea să-mi explicați, vă rog
Răspundeți
Principala problemă este modul în care stocați valoarea inițială recuperată. Apelați GetFloat()
și stocați rezultatul în owed
, o variabilă de tip int. GetFloat () returnează un număr în virgulă mobilă, care va fi implicit aruncat ca un int atunci când încercați să-l stocați în datorie. În acest proces, porțiunea punctului zecimal va fi trunchiată. Asta înseamnă că ați putea încerca să stocați 4,85 toată ziua și va fi stocat întotdeauna ca întreg 4.
Ar trebui să stocați valoarea returnată de la GetFloat () într-un var float, nu într-un int. Mai târziu, înmulțiți cu 100 și rotunjiți și apoi stocați-l într-un int, așa cum încercați să faceți.
Ca notă laterală, ultimele rânduri, în timp ce acestea vor funcționa , nu sunt teribil de curate. Creați un float nou pentru a modifica ceea ce ar trebui să fie un alt float și să stocați rezultatul, iar pe următoarea linie, aruncați un float într-un int și să stocați int înapoi într-un float. Ar avea mai mult sens să rotunjiți plutitorul și să-l păstrați înapoi în același plutitor, dar pe următoarea linie să aruncați plutitorul ca un int și să-l păstrați într-un variat nou, int. int change = roundf(dollars*100);
Dacă acest lucru vă răspunde la întrebare, faceți clic pe bifa pentru a accepta. Să continuăm cu întreținerea forumului. 😉
Comentarii
- Cum aș putea rata asta? Mulțumesc mult. Codul meu a ajuns să pară groaznic după 3 ore de joc cu funcția rotundă, nu pot ' să cred că aș putea face o greșeală atât de stupidă;)
- S-ar putea să fiu eu doar super-pretențios, dar ar trebui să stați departe de Distribuție implicită și să folosiți întotdeauna Distribuire explicită face mult mai evident atât compilatorului, cât și viitorilor programatori ceea ce încercați să faceți. Este un obicei foarte bun de a intra mai devreme în programarea dvs., deoarece va fi a doua natură și vă va salva o mulțime de dureri de cap (și faceți un cod mult mai bun). int change = (int) (roundf (dolari * 100));
Lasă un răspuns