Skip to main content

SA0057: Möglicherweise Verlust von Nachkommastellen

Ermittelt Anweisungen mit möglichem Verlust von Nachkommastellen.

Begründung: Ein Codestück der folgenden Art: diTemp2 := 1 rTemp1 := TO_REAL(diTemp2 / DINT#2) kann zu einer Fehlinterpretation führen. Der Autor oder Leser dieser Codezeile kann der Annahme sein, die Division würde als REAL-Operation durchgeführt und das Ergebnis würde in diesem Fall REAL#0.5 sein. Dies ist jedoch nicht der Fall, die Operation wird als Integer-Operation durchgeführt, das Ergebnis wird auf REAL gecastet und rTemp1 erhält den Wert REAL#0.

Um dies zu vermeiden, sollten Sie durch einen Cast dafür sorgen, dass die Operation als REAL-Operation durchgeführt wird:

rTemp1 := TO_REAL(diTemp2) / REAL#2;

Wichtigkeit: Mittel

Beispiel 67. Beispiel
PROGRAM PLC_PRG
VAR
    rTemp1 : REAL;
    diTemp2 : DINT;
    liTemp3 : LINT;
END_VAR
diTemp2 := diTemp2 + DINT#11;
// SA0057
rTemp1 := DINT_TO_REAL(diTemp2 / DINT#3);    
rTemp1 := DINT_TO_REAL(diTemp2) / REAL#3.0;
liTemp3 := liTemp3 + LINT#13;
// SA0057
rTemp1 := LINT_TO_REAL(liTemp3 / LINT#7);
rTemp1 := LINT_TO_REAL(liTemp3) / REAL#7.0;

Ausgabe unter Ansicht Meldungen:

  • sa_icon_message.png SA0057: Möglicherweise Verlust von Nachkommastellen