Rundungsfunktion ohne Bereichsüberlaufgefahr

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Rundungsfunktion ohne Bereichsüberlaufgefahr

Beitrag von Karl »

Hallo,

ich habe hier mal eine kleine Rundungsfunktion, die gerade bei größeren Zahlen ein Bereichsüberlauf verhindert:

Code: Alles auswählen

Procedure.f Runden (Zahl.f, Stellen.b)
  Protected vorkomma.l, nachkomma.l, Entscheider.b, ergebnis.f, teiler1.l, teiler2.l
  teiler1 = Pow(10, Stellen)
  teiler2 = Pow(10, Stellen + 1)
  vorkomma = Int(Zahl)
  nachkomma = Int((Zahl-vorkomma) * teiler1)
  Entscheider = Int((Zahl-vorkomma) * teiler2) - nachkomma * 10
  If Entscheider < 5
    ergebnis = vorkomma + (nachkomma/teiler1)
  Else
    ergebnis = vorkomma + ((nachkomma + 1)/teiler1)
  EndIf
  ProcedureReturn ergebnis
EndProcedure
Vielleicht kann es einer ja gebrauchen.

Gruß Karl
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X