Skip to main content

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

Esempio 67. Esempio
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:

  • sa_icon_message.png SA0057: Possibile perdita di cifre decimali