Ergebnis 1 bis 6 von 6

Aufrunden mit ceil (C Programmierung)

  1. #1 Zitieren
    Legende Avatar von Testgrave
    Registriert seit
    Jan 2007
    Ort
    Florida
    Beiträge
    7.451
    Hi,
    ich mache gerade ein paar Übungsaufgaben und beisse mir gerade die Zähne an einer Aufgabe aus und andere Leute aus meinem Kurs sind grad nicht online...

    Die Aufgabenstellung ist, ein int einzulesen als Cent betrag, diesen in einen Euro betrag umzuwandeln und dann immer aufgerundet ausgeben, also wenn man z.B. 90 eingibt, dass 1 ausgegeben wird... Oder bei 101, dann 2 Ausgegeben wird, usw...

    Wie kann ich das machen?
    Ich schreibe einfach mal meine Main funktion hier rein:
    {
    int a;
    float erg;
    int Ende;



    printf("<1> Programm oeffnen, <2> Programm beenden!\n");
    scanf("%d",&Ende);
    while (Ende != 2) {

    printf("Bitte geben sie den zu rundenden Betrag in Cents ein:\n");
    scanf("%d",& a);
    erg = a/100;



    printf("Der Betrag in aufgerundeten Euros ist: %f\n\n\n", ceil(erg));
    }

    Hoffe mir kann jmd. schnell helfen :O
    Das Problem ist ja, dass ich mit dem integer Wert keine Nachkommastellen mehr besitze und somit nicht mehr wirklich runden kann...


    mfg Test-Grave
    [Bild: Newknightsig.gif]
    Der schrickestu gerñ kain uechtñ nÿmer gelerñ
    Testgrave ist offline

  2. #2 Zitieren
    Drachentöter Avatar von devZero
    Registriert seit
    Sep 2011
    Beiträge
    4.328
    Das Problem ist ja, dass ich mit dem integer Wert keine Nachkommastellen mehr besitze und somit nicht mehr wirklich runden kann...
    Wenn das dein Problem ist, könntest du es doch einfach welche hinzufügen?
    Wobei das Runden per double->int keine schöne Lösung ist.

    Besser wäre z.B. so:
    Code:
    include math.h
    
    double Round(double Zahl, unsigned int Stellen) 
    { 
        Zahl *= pow(10, Stellen); 
        if (Zahl >= 0) 
            floor(Zahl + 0.5) 
        else 
            ceil(Zahl - 0.5); 
        Zahl /= pow(10, Stellen); 
        return Zahl; 
    }
    devZero ist offline Geändert von devZero (20.10.2011 um 22:17 Uhr)

  3. #3 Zitieren

    Batmanistrator
    Avatar von Thoronador
    Registriert seit
    Jul 2005
    Ort
    Morrowind, Vvardenfell-Distrikt
    Beiträge
    20.797
    Wandle die Werte vor der Division in Fließkommawerte um. Ansonsten wird nur eine Ganzzahldivision durchgeführt, und die liefert dir auch immer eine ganze Zahl (int) als Ergebnis zurück. So würde z.B. 1/100 den Wert 0 ergeben. Lösen kann man das z.B., indem man die Zeile mit der Division wie folgt schreibt:

    Code:
    erg = (float) a / 100.0f;
    Thoronador ist offline

  4. #4 Zitieren
    Legende Avatar von Testgrave
    Registriert seit
    Jan 2007
    Ort
    Florida
    Beiträge
    7.451
    Vielen Dank für die Antworten!!!

    Jetzt läufts
    [Bild: Newknightsig.gif]
    Der schrickestu gerñ kain uechtñ nÿmer gelerñ
    Testgrave ist offline

  5. #5 Zitieren
    Krieger Avatar von Lord of Alchemy
    Registriert seit
    Apr 2010
    Ort
    Berlin
    Beiträge
    431
    Zitat Zitat von Thoronador Beitrag anzeigen
    Wandle die Werte vor der Division in Fließkommawerte um. Ansonsten wird nur eine Ganzzahldivision durchgeführt, und die liefert dir auch immer eine ganze Zahl (int) als Ergebnis zurück. So würde z.B. 1/100 den Wert 0 ergeben. Lösen kann man das z.B., indem man die Zeile mit der Division wie folgt schreibt:

    Code:
    erg = (float) a / 100.0f;
    Wobei man hier a doch aber nicht mehr nach float casten muss. a/100.0 reicht vollkommen.
    "Sein oder Nichtsein" ist keine Frage, sondern eine Tautologie.
    Lord of Alchemy ist offline

  6. #6 Zitieren

    Batmanistrator
    Avatar von Thoronador
    Registriert seit
    Jul 2005
    Ort
    Morrowind, Vvardenfell-Distrikt
    Beiträge
    20.797
    Natürlich reicht es, wenn einer der Werte den Type float hat, aber da der andere dann auch implizit nach float gecastet wird, macht das hier keinen nennenswerten Unterschied. Es sei denn, man ist sehr schreibfaul.
    Thoronador ist offline

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •