这是给你的。
我有一个在文本文件中传递的数字,长度为13,小数点2位。
0000000627909因此,在现实中,它表示以下数字6279.09。
在旧世界里有一个美丽的ABAP句子..。
PACK packed_number TO number_with_decimal_type...unfortunately --在OO上下文中是不允许的,并将其标记为已过时,并附带了一个普通赋值也会这样做的注释。嗯,它不..。至少在有小数位需要关注的地方,情况并非如此。
下面是一个示例:
REPORT zzpj_unpack_test.
DATA:
BEGIN OF gs_structured,
loan_entitlement TYPE c LENGTH 13,
END OF gs_structured.
DATA: gv_packed TYPE p LENGTH 13 DECIMALS 2.
INITIALIZATION.
gs_structured = VALUE #(
loan_entitlement = '0000000627909'
).
DATA(gs_dc) = CORRESPONDING /ibs/sbsc_change_main( gs_structured ).
PACK gs_structured-loan_entitlement TO gv_packed. "works beautifilly!
gv_packed = gs_structured-loan_entitlement. "does not care about decimal places
CLASS lcl_main DEFINITION FINAL CREATE PRIVATE.
PUBLIC SECTION.
CLASS-METHODS:
main.
ENDCLASS.
CLASS lcl_main IMPLEMENTATION.
METHOD main.
DATA ls_structured LIKE gs_structured.
DATA lv_packed TYPE p LENGTH 13 DECIMALS 2.
ls_structured = VALUE #(
loan_entitlement = '0000000627909'
).
"PACK gs_structured-loan_entitlement TO gv_packed. "does not work in OO context
lv_packed = ls_structured-loan_entitlement. "does not care about decimal places
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
lcl_main=>main( ).一个简单的任务使627909.00脱离了6279.09。
因此,我的问题是:在面向对象上下文中,真正的与PACK语句的等价性是什么?
发布于 2021-02-18 05:15:24
你可以让ABAP相信你的包装数字有0小数点,虽然它没有,通过ASSIGN gv_packed TO
CLASS lcl_app DEFINITION.
PUBLIC SECTION.
CLASS-METHODS simulate_pack.
ENDCLASS.
CLASS lcl_app IMPLEMENTATION.
METHOD simulate_pack. "<=== simulate PACK
DATA: gv_packed TYPE p LENGTH 13 DECIMALS 2.
FIELD-SYMBOLS <dec> TYPE p.
ASSIGN gv_packed TO <dec> CASTING DECIMALS 0. "<=== <dec> points to GV_PACKED memory
<dec> = '0000000627909'. "<=== assigns the value to GV_PACKED !
" Check Actual values = Expected values
ASSERT <dec> = 627909.
ASSERT gv_packed = '6279.09'.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
lcl_app=>simulate_pack( ).
DATA: gv_packed TYPE p LENGTH 13 DECIMALS 2.
PACK '0000000627909' TO gv_packed. "<=== use PACK
" Check Actual value = Expected value
ASSERT gv_packed = '6279.09'.发布于 2021-02-18 09:26:25
接受的答案是非常聪明的,虽然我也会张贴我自己的解决方案。
我刚刚创建了一个简单的函数模块,在其上下文中允许PACK语句进行工作。然后在类的方法中使用这样的函数模块,这是(仍然:)可能的。
FUNCTION Z_PACK_NUMBER.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" REFERENCE(IV_PACKED_NUMBER) TYPE C
*" EXPORTING
*" REFERENCE(EV_VALUE) TYPE P
*"----------------------------------------------------------------------
PACK iv_packed_number TO ev_value.
ENDFUNCTION.https://stackoverflow.com/questions/66248967
复制相似问题