Konverter fra dollars til cent
On februar 14, 2021 by adminJeg prøver at bruge den runde funktion til at gå fra dollars til cent, men jeg tror, der er noget ved rund funktion, jeg har misforstået, fordi jeg bare ikke får decimalerne med mig, når jeg multiplicerer med 100 fra float til int. Dette er den pågældende kode
#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
- jeg var ikke ' ved ikke, hvordan man afrunder det, jeg udgav rundt () ikke roundf () kunne du forklare det til mig
Svar
Hovedproblemet er, hvordan du gemmer den oprindelige hentede værdi. Du ringer til GetFloat()
og gemmer resultatet i owed
, en variabel af typen int. GetFloat () returnerer et floating point-nummer, som implicit kastes som et int, når du prøver at gemme det i skyldig. I processen afkortes decimaldelen. Det betyder, at du kan prøve at gemme 4,85 hele dagen, og det vil altid gemmes som heltal 4.
Du skal gemme den værdi, der returneres fra GetFloat () i en float var, ikke en int. Senere skal du gange med 100 og runde og derefter gemme det i en int, som du prøver at gøre.
Som en sidebemærkning, de sidste par linjer, mens de fungerer , er ikke rigtig rent. Du opretter en ny float for at ændre, hvad der skal være en anden float, og gemme resultatet, og på den næste linje kaster du en float til en int og gemmer int tilbage i en float. Det ville give mere mening at afrunde svømmeren og opbevare den tilbage i samme svømmer, men på den næste linje at kaste svømmeren som en int og gemme den i en ny, int var. Eller en renere ting ville være at gøre det hele på en linje: int change = roundf(dollars*100);
Hvis dette besvarer dit spørgsmål, skal du klikke på fluebenet for at acceptere. Lad os holde øje med forumvedligeholdelse. 😉
Kommentarer
- Hvordan kunne jeg gå glip af det? Mange tak. Min kode endte med at se forfærdelig ud efter 3 timers pusling med den runde funktion, jeg kan ' ikke tro på, at jeg kunne lave en så dum fejl;)
- Det kan være mig, der bare er meget kræsne, men du skal holde dig væk fra Implicit casting og altid bruge Eksplicit casting det gør det meget mere indlysende for compileren såvel som fremtidige programmører, hvad du faktisk prøver at gøre. Det er en meget god vane at komme ind tidligt i din programmering, da det vil være anden natur og spare dig for hovedpine (og lave en meget bedre kode). int ændring = (int) (roundf (dollars * 100));
Skriv et svar