Konvertera från dollar till cent
On februari 14, 2021 by adminJag försöker använda den runda funktionen för att gå från dollar till cent, men jag tror att det finns något med rund funktion jag har missförstått, för jag får bara inte decimalerna när jag multiplicerar med 100 från flottören till ett int. Det här är koden i fråga
#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;
Kommentarer
- jag var inte ' vet inte hur man avrundar det jag utgick runt () inte roundf () kan du förklara det för mig
Svar
Huvudproblemet är hur du lagrar det ursprungliga hämtade värdet. Du ringer till GetFloat()
och lagrar resultatet i owed
, en variabel av typen int. GetFloat () returnerar ett flytande nummer som implicit kommer att kastas som ett int när du försöker lagra det i skyldig. Under processen trunkeras decimalpunkten. Det betyder att du kan försöka lagra 4,85 hela dagen och det kommer alltid att sparas som heltal 4.
Du bör lagra värdet som returneras från GetFloat () i en floatvar, inte ett int. Senare multiplicerar du med 100 och avrundar och sedan lagrar det i ett int, som du försöker göra.
Som en sidnot, de sista raderna, medan de fungerar , är inte väldigt rent. Du skapar en ny flottör för att modifiera vad som ska vara en annan flottör och lagra resultatet, och på nästa rad kastar du en flottör till ett int och lagrar intet tillbaka i ett flottör. att runda flottören och lagra den tillbaka i samma flottör, men på nästa rad för att kasta flottören som en int och lagra den i en ny, int var. Eller, en renare sak skulle vara att göra allt i en rad: int change = roundf(dollars*100);
Om detta svarar på din fråga, klicka på kryssrutan för att acceptera. Låt oss fortsätta med forumunderhållet. 😉
Kommentarer
- Hur kunde jag missa det? Tack så mycket. Min kod såg hemskt ut efter 3 timmars bråk med den runda funktionen, jag kan ' inte tro att jag kunde göra ett så dumt misstag;)
- Det här kan vara att jag bara är super picky, men du bör hålla dig borta från Implicit casting och alltid använda Explicit Casting det gör det mycket mer uppenbart för kompilatorn såväl som framtida programmerare vad du faktiskt försöker göra. Det är en mycket bra vana att komma in tidigt i din programmering eftersom det kommer att vara andra natur och spara dig mycket huvudvärk (och göra mycket bättre kod). int förändring = (int) (roundf (dollar * 100));
Lämna ett svar