SA0020: Muhtemelen kesilmiş değerin REAL değişkenine atanmasıPermalink

Kesilmiş bir değerin ‎REAL‎ veri tipi değişkenine atanabileceği tamsayı değişkenleri üzerindeki işlemleri tespit eder

Gerekçe: Statik analiz, bir tamsayı hesaplamasının sonucu bir ‎REAL‎ veya ‎LREAL‎ değişkenine atandığında hata verir. Programcı bu tür bir atamanın olası yanlış yorumlanmasına karşı uyarılmalıdır: ‎lrealvar := dintvar1 * dintvar2‎. ‎LREAL‎ 'un değer aralığı ‎DINT‎'un değer aralığından daha büyük olduğundan, hesaplama sonucunun her zaman ‎LREAL‎'da temsil edilebileceği varsayılabilir. Ama durum böyle değil. İşlemci çarpma işleminin sonucunu bir tamsayı olarak hesaplar ve ardından sonucu ‎LREAL‎ adresine atar. Tamsayı hesaplamasındaki bir taşma kaybolacaktır. Sorunu aşmak için hesaplama ‎REAL‎ işlemi olarak yapılmalıdır: ‎lreal_var := TO_LREAL(dintvar1) * TO_LREAL(dintvar2)‎.

Önemliymiş: Yüksek

Örnek

PROGRAM PLC_PRG
VAR
 rx : LREAL;
 di : DINT;
END_VAR
rx := di * di  			                // SA0020
rx := TO_LREAL(di) * TO_LREAL(di) // No message

--> SA0020: Possibly assignment of truncated value to REAL variable