Runden von Zahlen

Alles, was den Reportdesigner und Drucken betrifft. Fehlermeldungen, Fragen, Reports

Moderatoren: Raffenberg, A. Schüller, Pfotenhauer

Antworten
NielsWestphal
Beiträge: 589
Registriert: Sonntag 2. Dezember 2018, 18:33
Schulform: Gymnasium

Runden von Zahlen

Beitrag von NielsWestphal »

Hallo zusammen,

ich möchte in einem Formular ein Ergebnis runden, schaffe es aber nicht.
Bisher wird als Ergebnis 9 ausgegeben, obwohl aus (11+8)/2=9,5 eigentlich 10 das Ergebnis sein müsste.
Was übersehe ich? Wer kann helfen?

Auszug aus der Berechnung:

Code: Alles auswählen

    ergebnis1:=(somi1+klausur1)/2;
    RoundTo(ergebnis1,0);
                                                                           
    if DS_SoMi1['NotenKrz'] = ''
    then text:=''
    else
    if DS_Kl1['NotenKrz'] = ''
    then text:=Int64ToStr(SoMi1)
    else
    text:=Int64ToStr(ergebnis1);
mfg
Niels Westphal
NielsWestphal
Beiträge: 589
Registriert: Sonntag 2. Dezember 2018, 18:33
Schulform: Gymnasium

Re: Runden von Zahlen

Beitrag von NielsWestphal »

Habe es erstmal selbst gelöst...

Code: Alles auswählen

    ergebnis1:=(somi1+klausur1)/2;
    if odd(somi1+klausur1)=true
    then ergebnis2:=ergebnis1+1
    else ergebnis2:=ergebnis1;
                                                               
    if DS_SoMi1['NotenKrz'] = ''
    then text:=''
    else
    if DS_Kl1['NotenKrz'] = ''
    then text:=Int64ToStr(SoMi1)
    else
    text:=Int64ToStr(ergebnis2);
mfg
Niels Westphal
Kurosinski
Beiträge: 955
Registriert: Sonntag 19. Mai 2019, 19:53
Schulform: Gesamtschule

Re: Runden von Zahlen

Beitrag von Kurosinski »

Würde es nicht ausreichen, wenn man zum Ergebnis 0,5 addiert und dann erst (ab)rundet?

Ansonsten hilft evtl.
https://wiki.freepascal.org/Round/de
Christoph Sprung
Beiträge: 415
Registriert: Montag 3. Dezember 2018, 18:43
Schulform: WbK (a. D.)

Re: Runden von Zahlen

Beitrag von Christoph Sprung »

Guten Tag,
m. E. benötigen Sie die Round-Funktion nur einmal in der letzten Zeile:

Code: Alles auswählen

 ergebnis1:=(somi1+klausur1)/2;                                                                      
    if DS_SoMi1['NotenKrz'] = ''
    then text:=''
    else
    if DS_Kl1['NotenKrz'] = ''
    then text:=IntToStr(SoMi1)
    else
    text:= IntToStr(Round(ergebnis1));
Grüße aus Bochum
Christoph Sprung
Benutzeravatar
Raffenberg
Beiträge: 2611
Registriert: Dienstag 25. September 2018, 15:22
Schulform: Gymnasium
Kontaktdaten:

Re: Runden von Zahlen

Beitrag von Raffenberg »

Hallo,
wie oben in dem Link beschrieben, rundet Delphi kaufmännisch, nicht mathematisch. Wenn ich das richtig sehe, muss man in Delphi mathematisches runden selbst programmieren: https://www.delphi-treff.de/tipps-trick ... bezeichnet.
Mit freundlichen Grüßen
Jens Raffenberg
Christoph Sprung
Beiträge: 415
Registriert: Montag 3. Dezember 2018, 18:43
Schulform: WbK (a. D.)

Re: Runden von Zahlen

Beitrag von Christoph Sprung »

Hallo Herr Raffenberg,
Sie haben natürlich Recht. In dem vorliegenden Fall, bei dem als Nachkommastelle nur '5' auftreten kann (falls somi1 und klausur1 Notenpunkte sind), sollte es richtig werden, wenn die letzte Zeile ergänzt wird:

Code: Alles auswählen

text:= IntToStr(Round(ergebnis1 + 0.1));
Grüße aus Bochum
Christoph Sprung
Antworten