Von Dollar in Cent umrechnen
On Februar 14, 2021 by adminIch versuche, die Rundungsfunktion zu verwenden, um von Dollar in Cent zu wechseln, aber ich glaube, dass ich etwas an der Rundungsfunktion habe missverstanden, weil ich die Dezimalstellen einfach nicht mitbekomme, wenn ich mit 100 vom Float zu einem Int multipliziere. Dies ist der fragliche Code
#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;
Kommentare
- Ich war nicht ' Ich weiß nicht, wie ich es abrunden soll. Ich habe runde () und nicht roundf (). Könntest du es mir bitte erklären? class = „answer“>
Das Hauptproblem besteht darin, wie Sie den ursprünglich abgerufenen Wert speichern. Sie rufen
GetFloat()
auf und speichern das Ergebnis inowed
, einer Variablen vom Typ int. GetFloat () gibt eine Gleitkommazahl zurück, die implizit als int umgewandelt wird, wenn Sie versuchen, sie in geschuldet zu speichern. Dabei wird der Dezimalpunkt abgeschnitten. Das bedeutet, dass Sie versuchen könnten, 4,85 den ganzen Tag zu speichern, und es wird immer als Ganzzahl 4 gespeichert.Sie sollten den von GetFloat () zurückgegebenen Wert in einer float-Variable speichern, nicht in einem int. Multiplizieren Sie später mit 100 und runden Sie und speichern Sie es dann in einem int, wie Sie es versuchen.
Als Randnotiz die letzten Zeilen, während sie funktionieren Sie erstellen einen neuen Float, um einen anderen Float zu ändern und das Ergebnis zu speichern. In der nächsten Zeile wird ein Float in ein Int umgewandelt und das Int wieder in einem Float gespeichert. Dies wäre sinnvoller Um den Schwimmer abzurunden und wieder im selben Schwimmer zu speichern, aber in der nächsten Zeile den Schwimmer als int zu werfen und in einer neuen, int var zu speichern. Oder eine sauberere Sache wäre, alles in einer Zeile zu tun:
int change = roundf(dollars*100);
Wenn dies Ihre Frage beantwortet, klicken Sie bitte auf das Häkchen, um zu akzeptieren. Lassen Sie uns über die Forum-Wartung auf dem Laufenden bleiben. 😉
Kommentare
- Wie könnte ich das verpassen? Ich danke dir sehr. Mein Code sah schrecklich aus, nachdem ich 3 Stunden lang an der runden Funktion herumgebastelt hatte. Ich kann ' nicht glauben, dass ich so einen dummen Fehler machen könnte;)
- Ich bin vielleicht nur sehr wählerisch, aber Sie sollten sich von Implicit Casting fernhalten und immer Explicit Casting verwenden Es macht sowohl dem Compiler als auch zukünftigen Programmierern viel klarer, was Sie tatsächlich tun möchten. Es ist eine sehr gute Angewohnheit, früh in Ihre Programmierung einzusteigen, da dies eine Selbstverständlichkeit ist und Ihnen viele Kopfschmerzen erspart (und viel besseren Code erstellt). int change = (int) (roundf (Dollar * 100));
Schreibe einen Kommentar