Routinen zur Rundung von Gleitkommawerten

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Routinen für Gleitkommawerte

Viele Rundungsroutinen in der Object Pascal-Laufzeitbibliothek (RTL) verwenden den für die FPU (Gleitkommaeinheit) oder das SSE-Register für 32 Bit bzw. 64 Bit festgelegten aktuellen Rundungsmodus. Einige RTL-Routinen haben eigene Rundungsmodi oder -algorithmen. In den Tabellen auf dieser Seite finden Sie Einzelheiten zu den verschiedenen Rundungsroutinen.

Rundungsroutinen

In der folgenden Tabelle sind die in der RTL verfügbaren Rundungsfunktionen zusammengefasst:

Name Argumenttyp Rückgabetyp Hat Ziffernparameter? Bereich des Ziffernparameters Rundungsmodus Bemerkungen

System.Round
(integriert)

Extended

Int64

Aktuelle Einstellung von RoundMode

System.Trunc
(integriert)

Extended

Int64 Immer rmTruncate (gegen null abschneiden) Entspricht Int. Rückgabetyp ist Integer.

System.Int
(integriert)

  • Extended für 32 Bit
  • Double für 64 Bit
  • Extended für 32 Bit
  • Double für 64 Bit
Immer rmTruncate (gegen null abschneiden) Entspricht Trunc. Rückgabetyp ist eine Gleitkommazahl.

System.Math.RoundTo

Extended Extended Ja -20 .. +20 kein Standardwert. Immer rmNearest ("Banker's Rounding", "Unverzerrte Rundung")

System.Math.SimpleRoundTo

Single
Double
Extended

Single
Double
Extended
Ja -37 .. +37

-2 ist der Standardwert.

Immer "Round half away from zero" SimpleRoundTo ist das herkömmliche "Abrunden", das in der Schule gelernt wurde.

System.Math.Ceil

Single
Double
Extended

Integer Immer rmUp (die kleinste folgende Ganzzahl)
System.Math.Floor Single
Double
Extended
Integer Immer rmDown (die größte vorherige Ganzzahl)
Data.FmtBcd.BCDRoundTo TBcd TBcd Ja Integer Aktuelle RoundMode-Einstellung
FMTBcd.BCDRoundAt
(veraltet)
String String Ja SmallInt Immer "Round half away from zero Veraltete Funktion.  Verwenden Sie BcdRoundTo.

Beispiele für positive Zahlen

In der folgenden Tabelle sind Rundungsbeispiele für positive Zahlen aufgeführt:

Name Rundungsmodus 0,4 0,5 0,6 1,4 1,5 1,6

System.Round(x)

rmNearest 0 0 1 1 2 2
rmDown 0 0 0 1 1 1
rmUp 1 1 1 2 2 2
rmTruncate 0 0 0 1 1 1

System.Trunc(x)

0 0 0 1 1 1

System.Int(X)

0,0 0,0 0,0 1,0 1,0 1,0

Math.RoundTo(x, 0)

0,0 0,0 1,0 1,0 2,0 2,0

Math.SimpleRoundTo(x,0)

0,0 1,0 1,0 1,0 2,0 2,0

Math.Ceil(x)

1 1 1 2 2 2

Math.Floor(x)

0 0 0 1 1 1

FMTBcd.BCDRoundTo(x,0)

rmNearest 0 0 1 1 2 2
rmDown 0 0 0 1 1 1

rmUp

1 1 1 2 2 2

rmTruncate

0 0 0 1 1 1
FmtBcd.RoundAt(x,0)
(veraltet)
"0" "1" "1" "1" "2" "2"

Beispiele für negative Zahlen

In der folgenden Tabelle zeigt Rundungsbeispiele für negative Zahlen aufgeführt:

Name Rundungsmodus -0,4 -0,5 -0,6 -1,4 -1,5 -1,6

System.Round(x)

rmNearest 0 0 -1 -1 -2 -2
rmDown -1 -1 -1 -2 -2 -2
rmUp 0 0 0 -1 -1 -1
rmTruncate 0 0 0 -1 -1 -1
System.Trunc(x) 0 0 0 -1 -1 -1
System.Int(X) 0,0 0,0 0,0 -1,0 -1,0 -1,0
Math.RoundTo(x,0) 0,0 0,0 -1,0 -1,0 -2,0 -2,0
Math.SimpleRoundTo(x,0) 0,0 -1,0 -1,0 -1,0 -2,0 -2,0
Math.Ceil(x) 0 0 0 -1 -1 -1
Math.Floor(x) -1 -1 -1 -2 -2 -2

FMTBcd.BCDRoundTo(x,0)

rmNearest 0 0 -1 -1 -2 -2
rmDown -1 -1 -1 -2 -2 -2
rmUp 0 0 0 -1 -1 -1
rmTruncate 0 0 0 -1 -1 -1
FmtBcd.RoundAt(x,0)
(veraltet)
"-0" "-1" "-1" "-1" "-2" "-2"

Beispiele für den Ziffernparameter mit RoundTo und SimpleRoundTo

Die Ziffer (D) gibt die Potenz von zehn an, auf die der gegebene Wert gerundet werden soll. Die Ziffer kann jeder beliebige Wert im Bereich von –20 bis 20 sein. In den folgenden Beispielen wird D = 0, -1 ... -5 verwendet.


Name 0 -1 -2 -3 -4 -5
Math.RoundTo(2.15625, D) 2,0 2,2 2,16 2,156 2,1562 2,15625
Math.SimpleRoundTo(2.15625, D) 2,0 2,2 2,16 2,156 2,1563 2,15625

Siehe auch

Codebeispiele