Konvertálás dollárról centre
On február 14, 2021 by adminA kerek függvényt próbálom dollárról centre váltani, de hiszem, hogy van valami a kerek függvényben félreértett, mert egyszerűen nem veszem magammal a tizedesjegyeket, amikor az úszótól az int-ig szorzom 100-zal. Ez a kérdéses kód
#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;
Megjegyzések
- nem voltam ' nem tudom, hogyan kell kerekíteni, köröztem () nem roundf (), meg tudnád nekem magyarázni, kérlek
válasz
A fő probléma az, hogy hogyan tárolja a kezdeti lekért értéket. Hívja a GetFloat()
-et, és az eredményt tárolja az owed
-ben, az int típusú változóban. A GetFloat () egy lebegőpontos számot ad vissza, amelyet implicit módon int-ként fognak leadni, amikor megpróbálja adósságban tárolni. A folyamat során a tizedespontos részt megcsonkítják. Ez azt jelenti, hogy megpróbálhat egész nap 4,85-et tárolni, és mindig 4-es egész számként fog tárolni.
A GetFloat () -ból visszaadott értéket float-változóban kell tárolnia, nem pedig int-ben. Később szorozd meg 100-zal és kerekítsd, majd majd tárold egy int-ben, ahogy próbálod.
Mellékesen: az utolsó néhány sor, amíg működni fognak , nem “borzasztóan tiszta. Létrehoz egy új úszót, hogy módosítsa a másik úszó elemét, és tárolja az eredményt, majd a következő soron dobjon egy úszót egy int-re, és az int-et egy úszóban tárolja. Ez sokkal értelmesebb lenne az úszó kerekítése és ugyanabban az úszóban való tárolása, de a következő sorban az úszó int-ként való öntése és új, int változathoz való tárolása. Vagy tisztább dolog lenne mindezt egy sorban végrehajtani: int change = roundf(dollars*100);
Ha ez válaszol a kérdésére, akkor kattintson a pipára az elfogadáshoz. Tartsuk fent a fórum karbantartását. 😉
megjegyzések
- Hogyan hagyhatnám ki ezt? Nagyon szépen köszönöm. A kódom végül szörnyen nézett ki, miután 3 órán át bíbelődtem a kerek funkcióval, nem tudom elhinni, hogy ' hihetnék, hogy ilyen ostoba hibát elkövethetek;)
- Lehet, hogy csak szelektív válogatós vagyok, de távol kell maradnia a hallgatólagos közvetítéstől, és mindig a explicit castingot kell használnia sokkal nyilvánvalóbbá teszi a fordító és a jövő programozói számára, hogy mit is akarsz valójában megtenni. Nagyon jó szokás a programozás korai szakaszába kezdeni, mivel ez másodlagos természetű lesz, és rengeteg fejfájást takarít meg (és sokkal jobb kódot készít). int változás = (int) (roundf (dollár * 100));
Vélemény, hozzászólás?