LREAL_TO_FMTSTR

LREAL_TO_FMTSTR 1:

Die Funktion konvertiert und formatiert eine Fließkommazahl in eine String-Variable mit dem folgenden Format: [ – ]dddd.dddd (dddd sind Dezimalzahlen). Die Anzahl der Zahlen vor dem Dezimalpunkt hängt von dem Wert der Fließkommazahl ab. Die Anzahl der Zahlen hinter dem Dezimalpunkt hängt von der geforderten Präzision ab. Ein Vorzeichen erscheint nur bei negativen Werten. Bei einem unendlichen positiven Wert wird '#INF' und bei unendlichem negativen Wert: '-#INF' zurückgeliefert. Wenn die übergebene Variable einen unzulässigen Wert besitzt (NaN, Not-a-Number), dann wird '#QNAN' oder '-#QNAN' zurückgeliefert. Wenn die Länge des formatierten Strings die maximal zulässige Länge des resultierenden Strings überschreitet, dann wird '#OVF' oder '-#OVF' zurückgeliefert.

FUNCTION LREAL_TO_FMTSTR : STRING(510)

VAR_INPUT

VAR_INPUT
    in         : LREAL;
    iPrecision : INT;
    bRound     : BOOL;
END_VAR

in: Fließkommazahl die konvertiert und formatiert werden soll.

iPrecision: Präzision. Der Wert bestimmt die Anzahl der Zahlen hinter dem Dezimalpunkt. Bei dem Minimalwert (Null) erscheinen keine Nachkommastellen, der Maximalwert von iPrecision wird durch die Anzahl der Zahlen vor dem Dezimalpunkt und die maximal zulässige Länge des resultierenden Strings begrenzt. Wenn in = 0 und iPrecision = 0 dann wird String '0' zurückgeliefert.

bRound: Beim gesetzten bRound-Parameter wird der formatierte String auf die entsprechenden Anzahl der Nachkommastellen (iPrecision) gerundet. Beim Runden gilt folgende Regel: Hat die Dezimalzahl hinter der letzten gewünschten Nachkommastelle den Wert >= 5 dann wird aufgerundet sonst nicht.

Beispiel 1:

Die Zahl 0.46523 soll in einen String mit zwei Nachkommstellen konvertiert und gerundet werden.

sOut := LREAL_TO_FMTSTR( 0.46523, 2, TRUE );

Das Ergebnis ist: '0.47';

Beispiel: 2

LREAL_TO_FMTSTR 2:

Die maximale Anzahl der signifikanten Dezimalstellen bei den LREAL-Variablen ist auf 15-Stellen begrenzt.

Bedingt durch die interne Darstellung der Fließkommazahlen und Rundungsfehler während der Konvertierung kann es vorkommen, dass der resultierende String nicht exakt dem Wert der in-Variable entspricht.

PROGRAM MAIN
VAR
    double : LREAL;
    s1     : STRING;
    s2     : STRING;
    s3     : STRING;
    s4     : STRING;
END_VAR
double := 0.5;
s1     := LREAL_TO_FMTSTR( double, 25, FALSE );
s2     := LREAL_TO_FMTSTR( double, 2, FALSE );
s3     := LREAL_TO_FMTSTR( double, 0, TRUE );
s4     := LREAL_TO_FMTSTR( double, 2, TRUE );

Das Ergebnis ist:

s1 = '0.4999999999999999756000000' Dies ist die interne Darstellung der double-Variablen. Diese Zahl wird als Ausgangspunkt für die Rundungsoperation benutzt.

s2 = '0.49'

Durch die Rundung ergeben sich dann folgende Ergebnisse:

s3 = '0'

s4 = '0.50'

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken (Kategoriegruppe)

TwinCAT v3.1.0

PC oder CX (x86, x64, ARM)

Tc2_Utilities (System)