Skip to main content

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

Exemple 67. Exemple
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:

  • sa_icon_message.png SA0057 : Perte possible des décimales