Skip to main content

SA0020:可能将截断的值分配给 REAL 变量

检测对整数变量的操作,其截断值可以分配给 REAL 数据类型变量

理由:当整数计算的结果分配给一个 REAL 或者 LREAL 多变的。应该提醒程序员注意对这种赋值的可能错误解释: lrealvar := dintvar1 * dintvar2.

因为取值范围 LREAL 大于 DINT,可以假设计算的结果总是可以表示为 LREAL.但事实并非如此。处理器将乘法的结果计算为整数,然后将结果转换为 LREAL.整数计算中的溢出将丢失。为了解决这个问题,计算必须作为 REAL 手术: lreal_var := TO_LREAL(dintvar1) * TO_LREAL(dintvar2).

重要性:高

32. 例子
PROGRAM PLC_PRG
VAR
    rX : LREAL;
    dI : DINT;
END_VAR
rX := dI * dI    // SA0020
rX := TO_LREAL(dI) * TO_LREAL(dI)    //no message

输出在 留言 看法:

  • sa_icon_message.png SA0020:可能将截断值分配给 REAL 变量