Routinen zur Rundung von Gleitkommawerten
Nach oben zu Routinen für Gleitkommawerte
Inhaltsverzeichnis
Viele Rundungsroutinen in der Delphi-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 |
Extended |
Int64 |
Aktuelle Einstellung von RoundMode |
|||
System.Trunc |
Extended |
Int64 | Immer rmTruncate (gegen null abschneiden) | Entspricht Int. Rückgabetyp ist Integer. | ||
System.Int |
|
|
Immer rmTruncate (gegen null abschneiden) | Entspricht Trunc. Rückgabetyp ist eine Gleitkommazahl. | ||
Extended | Extended | Ja | -20 .. +20 kein Standardwert. | Immer rmNearest ("Banker's Rounding", "Unverzerrte Rundung") | ||
Single |
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. | |
Single |
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 |
---|---|---|---|---|---|---|---|
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 | |
0 | 0 | 0 | 1 | 1 | 1 | ||
0,0 | 0,0 | 0,0 | 1,0 | 1,0 | 1,0 | ||
0,0 | 0,0 | 1,0 | 1,0 | 2,0 | 2,0 | ||
0,0 | 1,0 | 1,0 | 1,0 | 2,0 | 2,0 | ||
1 | 1 | 1 | 2 | 2 | 2 | ||
0 | 0 | 0 | 1 | 1 | 1 | ||
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 |
---|---|---|---|---|---|---|---|
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 | |
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
- Gleitkommaarithmetik
- Routinen für die FPU-Steuerung
- System.Math.SetFPURoundMode
- System.Math.SetSSERoundMode
- System.Math.SetRoundMode
- System.Round