AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Unterschiedliche Ergebnisse beim Runden

Ein Thema von Ritsch · begonnen am 14. Aug 2017 · letzter Beitrag vom 21. Aug 2017
 
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#19

AW: Unterschiedliche Ergebnisse beim Runden

  Alt 15. Aug 2017, 07:22
Moment. So habe ich es in der Schule gelernt. Ab 0,5 und drüber wird aufgerundet, da runter abgerundet. Und nicht auf die nächst gerade Zahl.

Eventuell sollten wir Begriffe definieren. Mathematisch, wie oben beschrieben. Kaufmännisch und dieses Bänker runden.

Mathematisch, siehe oben, wie in der Schule gelehrt.

Über diese verschiedenen Rundungsverfahren habe ich mir schon immer den Kopf zerbrochen.
[KLUGSCHEISSMODUS ON]
Alle drei sind mathematisch korrekte Rundungsmethoden.

kaufmännische Rundung: Alles incl. 0.5 wird aufgerundet.
technische Rundung: 0.5 und darunter wird abgerundet.

mathematische Rundung (bankers rounding):

.00 bis .49 wird abgerundet
.60 bis .99 wird aufgerundet
.51 bis .59 wird aufgerundet

.50 wird derart gehandelt,das die beizubehaltende Zahl zur nächsten geraden Zahl gerundet wird.
Bsp dafür:

2.25 wird zu 2.2
2.35 wird zu 2.4


Letzteres ist bereits auf Prozessor-Ebene so implementiert (zumindest bei x86) und wird standardmäßig
von den entsprechenden Sprachen incl(Delphi....schon seit Turbo Pascal-Zeiten) so für Rundungen verwendet.

https://de.wikipedia.org/wiki/Rundung
[/KLUGSCHEISSMODUS OFF]

und hier mal meine Routine für alle drei Methoden:

Delphi-Quellcode:
TYPE
   TRoundMethod = (rmKfm,rmTec,rmMat);

function RoundDirect(zahl:extended;dezimalstellen:Byte;methode:TRoundMethod=rmKfm):extended;
var
  hlp,hlp2,di : Extended;

begin
  di := Power(10,dezimalstellen);
  hlp := trunc(zahl*di);
  hlp2 := (zahl*di)-hlp;
  case methode of
     rmKfm : if (hlp2 >= 0.5) then hlp := hlp+1;
     rmTec : if (hlp2 > 0.5) then hlp := hlp+1;
     rmMat: begin
               if (hlp2 > 0.5) then hlp := hlp+1
               else
               begin
                 if (odd(trunc(hlp))) then hlp := hlp +1;
               end;

             end;
  end;
  result := hlp/di;
end;
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz