Converti da dollari a centesimi
Su Febbraio 14, 2021 da adminSto cercando di utilizzare la funzione round per passare da dollari a centesimi, ma credo che ci sia qualcosa nella funzione round che ho frainteso, perché semplicemente non ottengo i decimali con me quando moltiplico per 100 da float a int. Questo è il codice in questione
#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;
Commenti
- Non ero ' Non so come arrotondarlo stavo ascoltando round () non roundf () potresti spiegarmelo per favore
Rispondi
Il problema principale è come si memorizza il valore iniziale recuperato. Stai chiamando GetFloat()
e memorizzando il risultato in owed
, una variabile di tipo int. GetFloat () restituisce un numero in virgola mobile, che verrà cast implicitamente come int quando si tenta di memorizzarlo in owed. Nel processo, la parte del punto decimale verrà troncata. Ciò significa che potresti provare a memorizzare 4.85 tutto il giorno e verrà sempre memorizzato come numero intero 4.
Dovresti memorizzare il valore restituito da GetFloat () in una variabile float, non un int. Successivamente, moltiplica per 100 e arrotonda e quindi memorizzalo in un int, come stai cercando di fare.
Come nota a margine, le ultime righe, mentre funzioneranno , non sono terribilmente puliti. Si crea un nuovo float per modificare quello che dovrebbe essere un altro float e si memorizza il risultato, e nella riga successiva, si lancia un float su un int e si memorizza lint di nuovo in un float. Avrebbe più senso per arrotondare il float e memorizzarlo di nuovo nello stesso float, ma nella riga successiva per lanciare il float come int e memorizzarlo in una nuova int var. Oppure, una cosa più pulita sarebbe fare tutto in una riga: int change = roundf(dollars*100);
Se questo risponde alla tua domanda, fai clic sul segno di spunta per accettare. Continuiamo con la manutenzione del forum. 😉
Commenti
- Come potrei perderlo? Grazie mille. Il mio codice ha finito per sembrare terribile dopo 3 ore di armeggiare con la funzione round, non posso ' credere di poter fare un errore così stupido;)
- Potrei essere solo molto esigente, ma dovresti stare lontano dal cast implicito e utilizzare sempre casting esplicito rende molto più ovvio al compilatore e ai futuri programmatori quello che stai cercando di fare effettivamente. È una buona abitudine entrare presto nella programmazione poiché sarà una seconda natura e ti farà risparmiare un sacco di mal di testa (e fare un codice molto migliore). int cambiamento = (int) (roundf (dollari * 100));
Lascia un commento