SA0057: Olası ondalık basamak kaybıPermalink

Olası ondalık basamak kaybı olan ifadeleri tespit eder

Gerekçe: Aşağıdaki türde bir kod parçası (‎diTemp2 := 1 rTemp1 := TO_REAL(diTemp2 / DINT#2)‎) yanlış yorumlamaya neden olabilir. Bu kod satırının yazarı veya okuyucusu, bölme işleminin bir ‎REAL‎ işlemi olarak gerçekleştirileceğini ve bu durumda sonucun ‎REAL#0.5‎ olacağını varsayabilir. Ancak bu doğru değildir. Bu bir tamsayı işlemidir. Sonuç ‎REAL‎ 'a aktarılır ve ‎rTemp1‎, ‎REAL#0‎ değerini alır. Bunu önlemek için, işlemin bir ‎REAL‎ işlemi olarak gerçekleştirildiğinden emin olmak için bir döküm kullanın: ‎rTemp1 := TO_REAL(diTemp2) / REAL#2‎.

Önemliymiş: Orta

Örnek

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