Konverter fra dollar til cent
On februar 14, 2021 by adminJeg prøver å bruke den runde funksjonen til å gå fra dollar til cent, men jeg tror det er noe med rund funksjon jeg har misforstått, fordi jeg bare ikke får desimalene med meg når jeg multipliserer med 100 fra flottøren til en int. Dette er den aktuelle koden
#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 ' vet ikke hvordan jeg skal runde det jeg var uting round () ikke roundf () kunne du forklare det for meg
Svar
Hovedproblemet er hvordan du lagrer den opprinnelige hentede verdien. Du ringer til GetFloat()
og lagrer resultatet i owed
, en variabel av typen int. GetFloat () returnerer et flytende nummer, som implisitt blir kastet som et int når du prøver å lagre det i skyldig. I prosessen blir desimaltegnet avkortet. Det betyr at du kan prøve å lagre 4,85 hele dagen, og det vil alltid lagres som heltall 4.
Du bør lagre verdien som returneres fra GetFloat () i en float var, ikke en int. Senere multipliserer du med 100 og runder og deretter lagrer det i en int, slik du prøver å gjøre.
Som en sidemerknad, de siste linjene, mens de vil fungere , er ikke veldig rent. Du oppretter en ny flottør for å modifisere det som skal være en annen flottør og lagre resultatet, og på neste linje kaster du en flottør til en int og lagrer intet tilbake i en flottør. Det ville være mer fornuftig å runde flottøren og lagre den tilbake i samme flottør, men på neste linje for å kaste flottøren som en int og lagre den i en ny, int var. Eller, en renere ting ville være å gjøre alt i en linje: int change = roundf(dollars*100);
Hvis dette svarer på spørsmålet ditt, kan du klikke på haken for å godta. La oss fortsette med forumvedlikehold. 😉
Kommentarer
- Hvordan kunne jeg savne det? Tusen takk. Koden min endte med å se forferdelig ut etter 3 timer med å fikle rundt den runde funksjonen, jeg kan ' ikke tro at jeg kunne gjøre en så dum feil;)
- Dette kan være at jeg bare er veldig kresen, men du bør holde deg borte fra Implisitt casting og alltid bruke Eksplisitt casting det gjør det mye mer opplagt for kompilatoren så vel som fremtidige programmerere hva du prøver å gjøre. Det er en veldig god vane å komme inn tidlig i programmeringen, da det vil være andre natur og spare deg for hodepine (og lage mye bedre kode). int endre = (int) (roundf (dollar * 100));
Legg igjen en kommentar