SA0057: Möglicher Verlust von Nachkommastellen
Funktion | Ermittelt Anweisungen mit möglichem Verlust von Dezimalstellen. |
Begründung | Ein Codestück der folgenden Art:
kann zu einer Fehlinterpretation führen. Diese Codezeile kann zu der Annahme führen, 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 fREAL 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:
|
Wichtigkeit | Mittel |
Beispiele:
PROGRAM MAIN
VAR
fREAL : REAL;
nDINT : DINT;
nLINT : LINT;
END_VARnDINT := nDINT + DINT#11;
fREAL := DINT_TO_REAL(nDINT / DINT#3); // => SA0057
fREAL := DINT_TO_REAL(nDINT) / 3.0; // no error
fREAL := DINT_TO_REAL(nDINT) / REAL#3.0; // no error
nLINT := nLINT + LINT#13;
fREAL := LINT_TO_REAL(nLINT / LINT#7); // => SA0057
fREAL := LINT_TO_REAL(nLINT) / 7.0; // no error
fREAL := LINT_TO_REAL(nLINT) / REAL#7.0; // no error