如何解决OO 上下文中 PACK 的等价物是什么?
这是给你的。
我在文本文件中提供了一个数字,它是一个长度为 13 且保留 2 个小数位的压缩数字。
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
。
所以我的问题是: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'.
,
接受的答案非常聪明,尽管我也会发布我自己的解决方案。
我刚刚创建了一个简单的函数模块,它可以在其上下文中使用 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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。