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
输出在 留言 看法:
SA0020:可能将截断值分配给 REAL 变量