自己寫的擷取小數位的函式
使用方法:
CALL FUNCTION 'ZFN_GET_ROUND'
EXPORTING
PI_VALUE = "要處理的資料
PI_LEN = "要載取的小數點後面的位數
PI_TYPE = 'A' "載取方法:A 四捨五入 B 捨去後面的數,不處理進位問題 C 後面一位衹要大於0都要進位
IMPORTING
PO_VALUE = . "返回的最後結果
實現原始碼:
FUNCTION ZFN_PB_W_0114.
*"----------------------------------------------------------------------
*"*"區域介面:
*" IMPORTING
*" REFERENCE(PI_VALUE)
*" REFERENCE(PI_LEN) TYPE I
*" REFERENCE(PI_TYPE) TYPE CHAR1 DEFAULT 'A'
*" EXPORTING
*" REFERENCE(PO_VALUE)
*"----------------------------------------------------------------------
DATA: TMP_VALUE TYPE STRING,
TMP_INT TYPE STRING,
TMP_SCALE TYPE STRING.
DATA: TMP_LAST TYPE C LENGTH 1,
TMP_VAL TYPE I,
TMP_LVAL TYPE I.
* BREAK-POINT 'GC_JIMHUANG'.
* IF PI_VALUE = 0. PO_VALUE = 0 . EXIT. ENDIF.
TMP_VALUE = PI_VALUE.
CONDENSE TMP_VALUE.
SPLIT TMP_VALUE AT '.' INTO: TMP_INT TMP_SCALE.
CONDENSE: TMP_INT,TMP_SCALE.
IF TMP_SCALE = ''. PO_VALUE = PI_VALUE. EXIT. ENDIF.
CASE PI_TYPE.
WHEN 'A'. " 四捨五入
TMP_VAL = TMP_SCALE+0(PI_LEN).
TMP_LAST = TMP_SCALE+PI_LEN(1).
IF TMP_LAST = ''. TMP_LAST = '0'. ENDIF.
TMP_LVAL = TMP_LAST.
IF TMP_LVAL >= 5.
TMP_VAL = TMP_VAL + 1.
ENDIF.
TMP_SCALE = TMP_VAL.
CONDENSE TMP_SCALE.
IF STRLEN( TMP_SCALE ) > PI_LEN.
TMP_SCALE = TMP_SCALE+1(PI_LEN).
TMP_VAL = TMP_INT.
TMP_VAL = TMP_VAL + 1.
TMP_INT = TMP_VAL.
CONDENSE TMP_INT.
ENDIF.
DO PI_LEN TIMES.
IF STRLEN( TMP_SCALE ) < PI_LEN.
CONCATENATE '0' TMP_SCALE INTO TMP_SCALE.
ELSE.
EXIT.
ENDIF.
ENDDO.
CONCATENATE TMP_INT '.' TMP_SCALE INTO TMP_VALUE .
CONDENSE TMP_VALUE.
PO_VALUE = TMP_VALUE.
WHEN 'B'. "捨去後面的數,不處理進位問題
TMP_SCALE = TMP_SCALE+0(PI_LEN).
CONDENSE TMP_SCALE.
CONCATENATE TMP_INT '.' TMP_SCALE INTO TMP_VALUE .
CONDENSE TMP_VALUE.
PO_VALUE = TMP_VALUE.
WHEN 'C'. "後面一位衹要大於0都要進位
* BREAK-POINT 'GC_JIMHUANG'.
TMP_VAL = TMP_SCALE+0(PI_LEN).
TMP_LAST = TMP_SCALE+PI_LEN(1).
IF TMP_LAST <> '0' AND TMP_LAST <> ''.
TMP_VAL = TMP_VAL + 1.
ENDIF.
TMP_SCALE = TMP_VAL.
CONDENSE TMP_SCALE.
IF STRLEN( TMP_SCALE ) > PI_LEN.
TMP_SCALE = TMP_SCALE+1(PI_LEN).
TMP_VAL = TMP_INT.
TMP_VAL = TMP_VAL + 1.
TMP_INT = TMP_VAL.
CONDENSE TMP_INT.
ENDIF.
DO PI_LEN TIMES.
IF STRLEN( TMP_SCALE ) < PI_LEN.
CONCATENATE '0' TMP_SCALE INTO TMP_SCALE.
ELSE.
EXIT.
ENDIF.
ENDDO.
CONCATENATE TMP_INT '.' TMP_SCALE INTO TMP_VALUE .
CONDENSE TMP_VALUE.
PO_VALUE = TMP_VALUE.
IF PO_VALUE = '' OR PO_VALUE IS INITIAL.
PO_VALUE = 0.
ENDIF.
ENDCASE.
ENDFUNCTION.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9437124/viewspace-1021397/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- substr擷取函式 筆記函式筆記
- MySQL 字串函式:字串擷取MySql字串函式
- MySQl 擷取函式 left(),right(),substring(),substring_index() 的用法MySql函式Index
- sql常用函式詳解(一)——字串擷取SQL函式字串
- MySQL 字串擷取相關函式總結MySql字串函式
- Javascript之字串擷取函式slice()、substring()、substr()JavaScript字串函式
- MySQL 欄位擷取拼接MySql
- 分享一下自己寫的PHP函式PHP函式
- vertica 中位數函式 MEDIAN 的使用函式
- 3.3.2 函式的預設引數和佔位引數 函式過載函式
- 編寫小而美函式的藝術函式
- python函式教程:Python 字串操作(string替換、擷取等)Python函式字串
- 自己寫的一些函式--對角陣為1,小對角陣全是1函式
- PHP取整,四捨五入取整、向上取整、向下取整、小數擷取PHP
- Android&Java保留小數位數的幾種寫法AndroidJava
- JS字串擷取函式slice(),substring(),substr()的用法 區別split()後期遇到補充JS字串函式
- WPF啟動流程-自己手寫Main函式AI函式
- [提問交流]分享一個擷取字串的函式字串函式
- python將函式寫入模組中的小技巧Python函式
- 利用雲函式來實現獲取特定路徑+引數的小程式碼函式
- 箭頭函式、簡寫函式、普通函式的區別函式
- Linux 中 awk命令如何擷取指定欄位的前幾個字元Linux字元
- 函式的提升與重寫函式
- 手寫JavaScript常用的函式JavaScript函式
- NumPy常用的位運算函式函式
- 函式外與函式內的變數函式變數
- Rust 問答之如何獲取 main 函式的引數RustAI函式
- 字串擷取字串
- js擷取JS
- PHP 查詢、擷取字串函式詳解PHP字串函式
- 【封裝小技巧】數字處理函式的封裝封裝函式
- Shell中的字串擷取介紹字串
- js擷取影片的封面圖片JS
- Linux下的字串擷取詳解Linux字串
- 正規表示式中使用變數擷取某字串前後內容變數字串
- arcgis欄位值計算(擷取A欄位前8位+按照順序計算8位)
- 快取函式的簡單使用快取函式
- 使用正則擷取URL,獲取你想要的
- 手寫CommonJS 中的 require函式JSUI函式