"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

"C" Kommastellen abschneiden

charmin 05.12.2014 - 12:33 6194 6
Posts

charmin

Super Moderator
10x
Avatar
Registered: Dec 2002
Location: aut_sbg
Posts: 14559
pinschig, ich weiss :rolleyes:

Code: C
fprintf(stdout, "Ihr Betrag in US-Dollar [USD]: %.2f\n", USD);
USD*=100;
int USD2=USD;
USD= USD2/100;
fprintf(stdout, "Das sind %.0f Dollar und %0.2f Cent!", USD, USD);

möchte gerne den Betrag extra in Dollar und extra in cent ausgeben.
warum schneidet er mir nach der typumwandlung und division von zb "255" durch 100 trotzdem dann die 55 weg :bash: und es kommt dann wieder 2.00 raus...?
Und wie kann ich dann nur die "cent" ausgeben? %0.2f gibts anscheinend ned.

tia!
Bearbeitet von charmin am 05.12.2014, 12:52

XeroXs

doh
Avatar
Registered: Nov 2000
Location: Lieboch
Posts: 10331
Hmm..

Bin jetzt kein C Profi, aber ich seh da keine typumwandlung :confused:

USD*=100; --> USD = 255*100 also 25500
int USD2=USD; --> USD2 = 25500
USD= USD2/100; --> USD = 25500/100 also 255

da passiert also für dein Beispiel eigentlich garnix..

Mit Kommazahlen siehts dann so aus:

USD*=100; --> USD = 255,50*100 also 25550
int USD2=USD; --> USD2 = 2550
USD= USD2/100; --> USD = 25550/100 also 255,50
Bearbeitet von XeroXs am 05.12.2014, 12:43

Denne

Here to stay
Avatar
Registered: Jan 2005
Location: Germany
Posts: 2801
USD ist ein Int-Wert, also nur ganze Zahlen.
255/100 = 2 Rest 55, ergo gibt die Rechnung einfach 2 aus, da der Rest abgeschnitten wird.
Um an die 55 Cent zu gelangen, musst du eine Modulorechnung machen.

Code: C
fprintf(stdout, "Ihr Betrag in US-Dollar [USD]: %.2fn", USD);
USD*=100;
int USD2=USD;
USD= USD2/100;
int Cent = USD2 % 100;
fprintf(stdout, "Das sind %.0f Dollar und %.0f Cent!", USD, Cent);

So in der Art müsste es funktionieren. C ist schon ewig her und ich habs auf die Schnelle net getestet :)

edit:

@ XeroXs: ich glaube er bekommt als USD sowas wie "2,55" rein. Dann multipliziert er mit 100, damit er 255 erhält. Das sollte so schon funktionieren. Außer ich habe etwas falsch verstanden :D

charmin

Super Moderator
10x
Avatar
Registered: Dec 2002
Location: aut_sbg
Posts: 14559
naja hast recht, is keine Typumwandlung, hab mich blöd ausgedrückt.
er soll den float wert USD mal 100 in die int Variable USD2 lesen.
das wären bei USD = 2.55 dann USD2 = 255,
danach soll er die 255 durch 100 dividieren und in die variable USD als float speichern

AdRy

Auferstanden
Avatar
Registered: Oct 2002
Location: Wien
Posts: 5239
Zitat von charmin
danach soll er die 255 durch 100 dividieren und in die variable USD als float speichern

Ist USD auch als float deklariert?

charmin

Super Moderator
10x
Avatar
Registered: Dec 2002
Location: aut_sbg
Posts: 14559
Zitat von AdRy
Ist USD auch als float deklariert?

Code: C
int main (){
                                                                                /*************************/
                                                                                /*Ausgabe Programminfo   */
                                                                                /*************************/

    fprintf(stdout, "EUR2USD - W\x84hrungsrechner zum Umrechnen von Euro auf US-Dollar\nVersion1.0");
    fprintf(stdout, "\nAutor: Vorname Nachname, 3ABET, HTBLuVA ");
    fprintf(stdout, "\nDatum: 2014-12-02\n");
                                                                                /**************************/
                                                                                /* Deklaration der        */
                                                                                /* Variablen.             */
                                                                                /**************************/
    float EUR, USD;

                                                                                /**************************/
                                                                                /* Aufforderung den EUR-  */
                                                                                /* Betrag einzugeben.     */
                                                                                /**************************/

    fprintf(stdout, "\nBitte geben sie ihren gew\x81nschten Betrag ein [EUR] ein: ");

                                                                                /**************************/
                                                                                /* Ueberpruefung der      */
                                                                                /* Eingabe ob ein         */
                                                                                /* Buchstabe              */
                                                                                /* eingegeben wurde.      */
                                                                                /**************************/
    if (!fscanf(stdin, "%f", &EUR)) {
        fprintf(stdout, "\nFehler: Sie haben keinen Betrag angegeben!\n");
        return 0;
    }

                                                                                /**************************/
                                                                                /* Berechnen des          */
                                                                                /* Umrechnungsbetrages    */
                                                                                /**************************/
    USD = EUR * 1.2757;

                                                                                /**************************/
                                                                                /* Ausgabe des            */
                                                                                /* Ergebnisses.           */
                                                                                /**************************/
fprintf(stdout, "Ihr Betrag in US-Dollar [USD]: %.2f\n", USD);
USD*=100;
int USD2=USD;
USD= USD2/100;
fprintf(stdout, "Das sind %.0f Dollar und %0.2f Cent!", USD, USD);

                                                                                /**************************/
                                                                                /* Ende des Programms.    */
                                                                                /**************************/
    return 0;
}

charmin

Super Moderator
10x
Avatar
Registered: Dec 2002
Location: aut_sbg
Posts: 14559
Zitat von Denne
USD ist ein Int-Wert, also nur ganze Zahlen.
255/100 = 2 Rest 55, ergo gibt die Rechnung einfach 2 aus, da der Rest abgeschnitten wird.
Um an die 55 Cent zu gelangen, musst du eine Modulorechnung machen.

Code: C
fprintf(stdout, "Ihr Betrag in US-Dollar [USD]: %.2fn", USD);
USD*=100;
int USD2=USD;
USD= USD2/100;
int Cent = USD2 % 100;
fprintf(stdout, "Das sind %.0f Dollar und %.0f Cent!", USD, Cent);

So in der Art müsste es funktionieren. C ist schon ewig her und ich habs auf die Schnelle net getestet :)

edit:

@ XeroXs: ich glaube er bekommt als USD sowas wie "2,55" rein. Dann multipliziert er mit 100, damit er 255 erhält. Das sollte so schon funktionieren. Außer ich habe etwas falsch verstanden :D


danke, modulorechnung. so hats gefunzt :)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz