Skip to main content

SA0057:可能丢失小数位

检测可能丢失小数位的语句

理由:以下类型的一段代码(diTemp2 := 1 rTemp1 := TO_REAL(diTemp2 / DINT#2)) 可能会导致误解。这行代码的作者或读者可以假设除法将作为 REAL 操作,在这种情况下,结果将是 REAL#0.5.然而,事实并非如此。它是一个整数运算。结果被转换为 REALrTemp1 获取值 REAL#0.

为了避免这种情况,请使用强制转换来确保该操作作为 REAL 手术:

rTemp1 := TO_REAL(diTemp2) / REAL#2;

重要性:中等

67. 例子
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;

输出在 留言 看法:

  • sa_icon_message.png SA0057:可能丢失小数位