SA0057: Possibile perdita di cifre decimaliPermalink

Rileva le dichiarazioni con una possibile perdita di cifre decimali.

Giustificazione: Un pezzo di codice del tipo seguente (‎diTemp2 := 1 rTemp1 := TO_REAL(diTemp2 / DINT#2)‎) può causare un'interpretazione errata. L'autore o il lettore di questa riga di codice può supporre che la divisione venga eseguita come operazione ‎REAL‎ e in questo caso il risultato sarebbe ‎REAL#0.5‎. Tuttavia, questo non è vero. È un'operazione di tipo intero. Il risultato viene lanciato a ‎REAL‎ e ‎rTemp1‎ ottiene il valore ‎REAL#0‎. Per evitare ciò, utilizzare un cast per assicurarsi che l'operazione venga eseguita come operazione ‎REAL‎: ‎rTemp1 := TO_REAL(diTemp2) / REAL#2‎.

Importanza: Medio

Esempio

PROGRAM PLC_PRG
VAR
	rTemp1 : REAL;
	diTemp2 : DINT;
	liTemp3 : LINT;  
END_VAR

diTemp2 := diTemp2 + DINT#11;
rTemp1 := DINT_TO_REAL(diTemp2 / DINT#3);    // SA0057
rTemp1 := DINT_TO_REAL(diTemp2) / REAL#3.0;
liTemp3 := liTemp3 + LINT#13;
rTemp1 := LINT_TO_REAL(liTemp3 / LINT#7);    // SA0057
rTemp1 := LINT_TO_REAL(liTemp3) / REAL#7.0;


--> SA0057: Possible loss of decimal places