OO 上下文中的 PACK 等价物是什么?
What is the equivalent of PACK in OO context?
这是给你的。
我在文本文件中提供了一个长度为 13、小数点后两位的压缩数字。
0000000627909
所以实际上它代表下面的数字6279.09
。
现在在旧世界有这个美丽的 ABAP 句子...
PACK packed_number TO number_with_decimal_type
...不幸的是,这在 OO 上下文中是不允许的,并标记为 obsolete,并附有注释,说明正常赋值也是如此。好吧,它不会......至少在需要关注小数位的地方不会。
这是一个例子:
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
。
所以我的问题是:real 等同于 OO 上下文中的 PACK
句子是什么?
您可以通过 ASSIGN gv_packed TO <p> DECIMALS 0.
:
让 ABAP 相信您的打包号码有 0 个小数位,尽管它没有
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'.
接受的答案非常聪明,尽管我也会 post 我自己的解决方案。
我刚刚创建了一个简单的功能模块来完成工作,因为 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.
这是给你的。
我在文本文件中提供了一个长度为 13、小数点后两位的压缩数字。
0000000627909
所以实际上它代表下面的数字6279.09
。
现在在旧世界有这个美丽的 ABAP 句子...
PACK packed_number TO number_with_decimal_type
...不幸的是,这在 OO 上下文中是不允许的,并标记为 obsolete,并附有注释,说明正常赋值也是如此。好吧,它不会......至少在需要关注小数位的地方不会。
这是一个例子:
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
。
所以我的问题是:real 等同于 OO 上下文中的 PACK
句子是什么?
您可以通过 ASSIGN gv_packed TO <p> DECIMALS 0.
:
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'.
接受的答案非常聪明,尽管我也会 post 我自己的解决方案。
我刚刚创建了一个简单的功能模块来完成工作,因为 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.