SA0057: Possibile perdita di decimali
Determina le istruzioni con possibile perdita di cifre decimali.
Motivo: un pezzo di codice del seguente tipo: diTemp2 := 1 rTemp1 := TO_REAL(diTemp2 / DINT#2)
può portare a interpretazioni errate. L'autore o il lettore di questa riga di codice può presumere che la divisione sarebbe come REAL
-Operazione eseguita e il risultato sarebbe in questo caso REAL#0.5
essendo. Tuttavia, questo non è il caso, l'operazione viene eseguita come un'operazione intera, il risultato è attivo REAL
cast e rTemp1
ottiene il valore REAL#0
.
Per evitare ciò, utilizzare un cast per assicurarsi che l'operazione venga eseguita come a REAL
operazione:
rTemp1 := TO_REAL(diTemp2) / REAL#2;
Importanza: Media
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;
Uscita in Messaggi vista:
SA0057: Possibile perdita di cifre decimali