Converteren van dollars naar centen
Geplaatst op februari 14, 2021 door adminIk probeer de ronde-functie te gebruiken om van dollars naar centen te gaan, maar ik geloof dat er iets is met de ronde-functie die ik heb verkeerd begrepen, want ik krijg de decimalen gewoon niet bij me als ik vermenigvuldig met 100 van de vlotter naar een int. Dit is de code in kwestie
#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;
Reacties
- i wasn ' weet niet hoe ik het moet afronden ik was uding round () niet roundf () zou je het me kunnen uitleggen alstublieft
Answer
Het grootste probleem is hoe u de aanvankelijk opgehaalde waarde opslaat. U roept GetFloat()
aan en slaat het resultaat op in owed
, een variabele van het type int. GetFloat () retourneert een getal met drijvende komma, dat impliciet als een int zal worden gegoten wanneer u het probeert op te slaan in verschuldigd. Tijdens het proces wordt het decimale puntgedeelte afgekapt. Dat betekent dat je zou kunnen proberen om 4.85 de hele dag op te slaan en het zal altijd opslaan als geheel getal 4.
Je zou de waarde die wordt geretourneerd door GetFloat () moeten opslaan in een float var, niet in een int. Later, vermenigvuldig met 100 en rond en dan sla het op in een int, zoals je probeert.
Als een kanttekening, de laatste paar regels, terwijl ze zullen werken , zijn niet erg schoon. Je maakt een nieuwe float om aan te passen wat een andere float zou moeten zijn en slaat het resultaat op, en op de volgende regel cast je een float naar een int en slaat je de int weer op in een float. Het zou logischer zijn om de vlotter af te ronden en weer op te slaan in dezelfde vlotter, maar op de volgende regel om de vlotter als een int te casten en op te slaan in een nieuwe, int var. Of, een netter ding zou zijn om alles op één regel te doen: int change = roundf(dollars*100);
Als dit uw vraag beantwoordt, klik dan op het vinkje om te accepteren. Laten we doorgaan met forumonderhoud. 😉
Reacties
- Hoe kan ik dat missen? Hartelijk bedankt. Mijn code zag er uiteindelijk verschrikkelijk uit na 3 uur sleutelen aan de ronde-functie, ik kan ' niet geloven dat ik zon stomme fout zou kunnen maken;)
- Misschien ben ik gewoon super kieskeurig, maar je moet wegblijven van Impliciet casten en altijd Expliciet casten gebruiken maakt het voor zowel de compiler als toekomstige programmeurs veel duidelijker wat u werkelijk probeert te doen. Het is een zeer goede gewoonte om vroeg met programmeren te beginnen, omdat het een tweede natuur zal zijn en u veel kopzorgen zal besparen (en veel betere code zal maken). int change = (int) (roundf (dollars * 100));
Geef een reactie