检测可能丢失小数位的报表
理由以下类型的代码 (diTemp2 := 1 rTemp1 := TO_REAL(diTemp2 / DINT#2)
) 可能导致误读。这行代码的作者或读者可以假定除法将作为REAL
运算进行,在这种情况下,结果将是REAL#0.5
。然而,事实并非如此。这是一个整数运算。结果将被转换为REAL
,rTemp1
的值为REAL#0
。为避免出现这种情况,可使用投影确保操作作为REAL
操作执行:rTemp1 := TO_REAL(diTemp2) / REAL#2
。
重要性:中型
示例
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