SA0057 : Perte possible de décimales
Détecte les déclarations avec perte possible de décimales
Justification : Un morceau de code du type suivant (diTemp2 := 1 rTemp1 := TO_REAL(diTemp2 / DINT#2)
) peut entraîner une mauvaise interprétation. L'auteur ou le lecteur de cette ligne de code peut supposer que la division serait effectuée comme un REAL
opération, et dans ce cas le résultat serait REAL#0.5
. Cependant, ce n'est pas vrai. C'est une opération sur un nombre entier. Le résultat est exprimé en REAL
et rTemp1
obtient la valeur REAL#0
.
Pour éviter cela, utilisez un plâtre pour vous assurer que l'opération est effectuée comme un REAL
opération:
rTemp1 := TO_REAL(diTemp2) / REAL#2;
Importance : Moyenne
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;
Sortie dans le messages voir:
SA0057 : Perte possible des décimales