Konwertuj z dolarów na centy
On 14 lutego, 2021 by adminPróbuję użyć funkcji rundy, aby przejść z dolarów na centy, ale uważam, że jest coś w tej funkcji, którą mam niezrozumiany, ponieważ po prostu nie mam ułamków dziesiętnych ze sobą, gdy mnożę przez 100 z liczby zmiennoprzecinkowej do liczby int. To jest kod, o którym mowa
#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;
Komentarze
- i wasn ' nie wiem, jak to zaokrąglić, robiłem round () nie roundf (), czy mógłbyś mi to wyjaśnić, proszę,
Odpowiedz
Głównym problemem jest sposób przechowywania początkowej pobranej wartości. Wołasz GetFloat()
i zapisujesz wynik w owed
, zmiennej typu int. GetFloat () zwraca liczbę zmiennoprzecinkową, która zostanie niejawnie rzutowana jako liczba int, gdy spróbujesz zapisać ją w owed. W trakcie tego procesu część dziesiętna zostanie obcięta. Oznacza to, że możesz próbować przechowywać 4,85 przez cały dzień i zawsze będzie to liczba całkowita 4.
Wartość zwróconą przez GetFloat () należy przechowywać w zmiennej typu float, a nie int. Później pomnóż przez 100 i zaokrąglij, a potem zapisz to w int, tak jak próbujesz to zrobić.
Na marginesie, kilka ostatnich wierszy, podczas gdy będą działać , nie są strasznie czyste. Tworzysz nowy float, aby zmodyfikować to, co powinno być innym float i zapisać wynik, a w następnej linii rzutujesz float na int i zapisujesz int z powrotem w float. Miałoby to większy sens aby zaokrąglić zmiennoprzecinkowy i zapisać go z powrotem w tym samym zmiennoprzecinkowym, ale w następnej linii rzutować zmiennoprzecinkowy jako int i zapisać go w nowej, int var. int change = roundf(dollars*100);
Jeśli to odpowiada na Twoje pytanie, kliknij znacznik wyboru, aby zaakceptować. Kontynuujmy konserwację forum. 😉
Komentarze
- Jak mogłem to przegapić? Dziękuję bardzo. Mój kod wyglądał okropnie po 3 godzinach majstrowania przy funkcji round, nie mogę ' uwierzyć, że mógłbym popełnić taki głupi błąd;)
- To może być ja po prostu wybredny, ale powinieneś trzymać się z daleka od rzutowania niejawnego i zawsze używać rzutowania jawnego sprawia, że kompilator, a także przyszli programiści są znacznie bardziej oczywiste, co faktycznie próbujesz zrobić. To bardzo dobry zwyczaj, aby wcześnie rozpocząć programowanie, ponieważ będzie to druga natura i zaoszczędzi ci wielu bólów głowy (i zrobisz o wiele lepszy kod). int change = (int) (roundf (dollars * 100));
Dodaj komentarz