Abap 在OO上下文中,PACK的等价物是什么?
这是给你的 我有一个文本文件中的数字,长度为13,小数点后2位Abap 在OO上下文中,PACK的等价物是什么?,abap,Abap,这是给你的 我有一个文本文件中的数字,长度为13,小数点后2位 0000000627909 因此,实际上它代表以下数字6279.09 在旧世界有一句美丽的ABAP句子 PACK packed_number TO number_with_decimal_type …不幸的是,这在OO上下文中是不允许的,并用注释标记为正常赋值也会这样做。嗯,它不。。。至少在有小数点的地方没有 以下是一个例子: REPORT zzpj_unpack_test. DATA: BEGIN OF gs_struct
0000000627909
因此,实际上它代表以下数字6279.09
在旧世界有一句美丽的ABAP句子
PACK packed_number TO number_with_decimal_type
…不幸的是,这在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
中提取出来
因此,我的问题是:在OO上下文中,real与
PACK
句子的等价物是什么?你可以通过以下方式让ABAP相信你的压缩数字有0位小数,尽管它没有:
类lcl\U应用程序定义。
公共部分。
类方法模拟包。
末级。
类lcl_应用程序实现。
方法模拟u包。“您可以通过以下方式使ABAP相信您的压缩数字有0位小数,尽管它没有:
类lcl\U应用程序定义。
公共部分。
类方法模拟包。
末级。
类lcl_应用程序实现。
方法simulate_pack。“接受的答案非常聪明,尽管我也会发布我自己的解决方案
我刚刚创建了一个简单的函数模块,它可以在上下文中使用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.
被接受的答案是非常聪明的,尽管我也会发布我自己的解决方案
我刚刚创建了一个简单的函数模块,它可以在上下文中使用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.
据我所知,PACK
的唯一用途是在“旧SAP世界”中存储货币金额。相反,您可以使用CL\u ABAP\u DECFLOAT
的CONVERT\u DECFLOAT\u TO\u CURR
方法。您好,桑德拉,谢谢您的评论,但它对我不起作用。输入实际上是一个长度为13的字符链,而不是decloat34类型。我想我会把PACK
语句放在我自己的功能模块中。那么我至少可以从一个方法调用它。如果你先将数字转换为16或34 decfloat类型,那么数字存储在C类型中这一事实就不是问题了。但我猜您的用例与货币无关,因此我发布了通用解决方案的答案。据我所知,PACK
的唯一用例是在“旧SAP世界”中存储货币金额。相反,您可以使用CL\u ABAP\u DECFLOAT
的CONVERT\u DECFLOAT\u TO\u CURR
方法。您好,桑德拉,谢谢您的评论,但它对我不起作用。输入实际上是一个长度为13的字符链,而不是decloat34类型。我想我会把PACK
语句放在我自己的功能模块中。那么我至少可以从一个方法调用它。如果你先将数字转换为16或34 decfloat类型,那么数字存储在C类型中这一事实就不是问题了。但我猜您的用例与货币无关,所以我发布了一个通用解决方案的答案。