Skip to main content

SA0057: Posible pérdida de decimales

Detecta sentencias con posible pérdida de decimales

Justificación: Una pieza de código del siguiente tipo (diTemp2 := 1 rTemp1 := TO_REAL(diTemp2 / DINT#2)) puede causar una mala interpretación. El autor o lector de esta línea de código puede suponer que la división se realizaría como un REAL operación, y en este caso el resultado sería REAL#0.5. Sin embargo, eso no es verdad. Es una operación entera. El resultado se proyecta a REAL y rTemp1 obtiene el valor REAL#0.

Para evitar esto, utilice un yeso para asegurarse de que la operación se realice como un REAL operación:

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

Importancia: Media

ejemplo 67. Ejemplo
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;

Salida en el Mensajes vista:

  • sa_icon_message.png SA0057: Posible pérdida de decimales