Onkel Dagobert
Level-3
- Beiträge
- 5.957
- Reaktionspunkte
- 1.530
-> Hier kostenlos registrieren
Hallo Leute,
ich habe ein Problem mit einem Realwert.
Ich bekomme einen Wert im Real-Format als Eingangsparameter einer FC und muss diesem Wert durch Abschneiden der Kommastellen nach DINT wandeln. Nun habe ich bei manchen Werten den Effekt, daß die letzte Stelle durch den Befehl "TRUNC" verändert wird.
Konkret sieht es so aus:
Wenn ich testweise eine Konstante mit dem selben Wert "2.453065e+006" zuweise, wird die Wandlung korrekt ausgeführt.
Wie kann man sich das erklären? Mit SCL hat dieses Problem nichts zu tun, hab's auch mit AWL probiert - gleiches Ergebnis.
Wie komme ich über Umwege am einfachsten und sicher zu meinem DINT?
Gruß, Onkel
ich habe ein Problem mit einem Realwert.
Ich bekomme einen Wert im Real-Format als Eingangsparameter einer FC und muss diesem Wert durch Abschneiden der Kommastellen nach DINT wandeln. Nun habe ich bei manchen Werten den Effekt, daß die letzte Stelle durch den Befehl "TRUNC" verändert wird.
Konkret sieht es so aus:
Code:
VAR_INPUT
JULIANISCHER_TAG : REAL;
END_VAR
VAR_TEMP
JD : DINT;
END_VAR
BEGIN
JD := TRUNC(JULIANISCHER_TAG);
...
// wenn JULIANISCHER_TAG = 2.453065e+006
// dann wird JD = 2453064 - falsch!
Wenn ich testweise eine Konstante mit dem selben Wert "2.453065e+006" zuweise, wird die Wandlung korrekt ausgeführt.
Code:
VAR_TEMP
JD : DINT;
temp_real : REAL;
END_VAR
BEGIN
temp_real := 2.453065e+006;
JD := TRUNC(temp_real);
...
// wenn JULIANISCHER_TAG = 2.453065e+006
// dann wird JD = 2453065 - korrekt
Wie kann man sich das erklären? Mit SCL hat dieses Problem nichts zu tun, hab's auch mit AWL probiert - gleiches Ergebnis.
Wie komme ich über Umwege am einfachsten und sicher zu meinem DINT?
Gruß, Onkel