SCL中常量計算注意事項

2021-10-03 12:49:51 字數 878 閱讀 4520

常量值有指定的表示法,具體取決於資料型別和資料格式,分為有型別和無型別的表示法。

數學函式中運算有型別和無型別常量一定要慎重,否則可能會發生不需要的隱式轉換,從而導致生成不正確的值。看下面的例子:

dint型別: variable_dint := int# 2 +50000;

計算結果: variable_dint= -15534;

原因分析:有型別常量的資料型別決定了無型別常量的資料型別。 這意味著加法是在 int 資料型別區域中執行。 在第一步中,無型別常量 50000 將隱式轉換為 int 資料型別。 但這種轉換會導致生成負值 (-15536)。 然後該值將新增到有型別常量 (int#2)。 結果是 -15534。由於將寫入加法運算結果的變數被宣告為 dint 資料型別,因此數字 -15534 將隱式轉換為 dint 資料型別,並寫入到變數「variable_dint」。 但結果仍為負數。

解決方案

將兩個常量都採用有型別常量。 如果兩個常量都採用有型別常量,較長的資料型別將確定計算結果。

variable_dint := int# 2 +dint# 50000;在此計算操作中,將有型別常量 int#1 與有型別常量 dint#50000 相加。常量 int#2 將轉換為 dint 資料型別,並且兩個常量的相加將在 dint 資料型別區域中執行,最終得到正確的結果。

另一種方法是兩個常量都採用無型別常量。 如果兩個常量都採用無型別常量,它們在當前 cpu 上將被解釋為最寬的可能資料型別。 這意味著在 s7-1500 系列 cpu上,這兩個常量都解釋為 lint 資料型別。

variable_dint := 2 +50000;常量 2 和 50000 將解釋為 lint 資料型別,相加的結果將再次轉換為 dint 資料型別,最終也能得到正確的結果。

常量設定型別要慎重!!

Oracle 中常用函式注意事項

1.nvl 字段,x 字段值等於null就這個函式得到的結果就是 x 一般用於存在空值比較的情況下,比如欄位a與字段b都是int型,其中乙個等於null另乙個為非空值,你使用a b是不成立的,使用此條件查詢你將丟失這條本來不相等的資料,可以如此用法nvl 字段,1 nvl 字段,1 這樣就可以得到想...

MODIS計算NDVI注意事項

資料來源 modis的mod9a1產品,解析度500m,合成週期為8天 ndvi 歸一化植被指數 計算 公式 ndvi nir r nir r 其中nir為近紅外波段,r為紅光波段,分別對應modis第2和第1波段。ndbi 歸一化建築指數 計算公式 ndbi m ir n ir m ir n ir...

輸入資料的注意事項 字面常量 符號常量

當緩衝區為空時,程式才會暫停,讓使用者輸入資料。輸入回車後,資料全部送到輸入緩衝區。include include intmain void 小結 對於char,int,float等基本資料型別,直接使用std cin 輸入即可.特別注意 輸出使用 std cout 輸入使用 std cin 記憶訣...