5

我想知道该怎么做

  1. 数字分组

当我物有所值时,例如 3000000(300 万)我想在屏幕上打印 3.000.000(从最后一个字符开始每三个字符有一个点)

  1. 删除 value 前面的零

当我从表中选择一个值并将其打印在屏幕上时,该值会自动填充零:例如129变为0000129

4

4 回答 4

6

WRITE语句允许您指定货币。例子:

DATA price TYPE p DECIMALS 2.
price = '3000000'.
WRITE: / price CURRENCY 'USD'.

请注意,这不会解释数字本身,而只是根据您指定的货币在某些位置添加逗号和点。因此,如果您有一个值为 的整数3000000并且您用货币写它,USD结果将是30.000,00

我建议您阅读该WRITE声明的 F1 帮助信息,因为除此之外还有很多选择。

--

删除前导零是通过使用转换例程来完成的。将CONVERSION_EXIT_ALPHA_INPUT添加前导零CONVERSION_EXIT_ALPHA_OUTPUT并将其删除。可以将这些例程添加到字典中的域中,因此转换将自动完成。例如MATNR类型:

DATA matnr TYPE matnr.
matnr = '0000129'.
WRITE: / matnr.

这将输出129,因为域MATNR已指定转换例程。

在没有这个的类型的情况下,例如:

DATA value(7) TYPE n.
value = '0000129'.
WRITE: / value.

输出将是0000129. 您可以调用CONVERSION_EXIT_ALPHA_OUTPUT例程来实现不带前导零的输出:

DATA value(7) TYPE n.
value = '0000129'.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
  EXPORTING
    input  = value
  IMPORTING
    output = value.
WRITE: / value.
于 2011-10-23T13:27:15.343 回答
2

另请注意,由WRITE语句触发的数字类型的输出转换由用户主数据中的属性控制。应在此处配置小数分隔符和数字分组。

您可以在用户主事务中检查这一点,例如 SU01 或 SU01D。

于 2011-12-14T17:55:13.263 回答
1

要删除零填充,请使用 NO-ZERO 语句。对于千位分隔符,我没有看到任何问题,因为它是 ABAP 打印 P 类型值的标准方式。这是一个示例代码。

REPORT  ZZZ.

DATA:
  g_n TYPE n LENGTH 10 VALUE '129',
  g_p TYPE p LENGTH 12 DECIMALS 2 VALUE '3000000'.

START-OF-SELECTION.
  WRITE /: g_n, g_p.
  WRITE /: g_n NO-ZERO, g_p.

这会产生输出。

000000129
           3.000.000,00
      129
           3.000.000,00
于 2011-10-23T13:33:07.777 回答
1

要删除前导零,您可以执行以下操作:

data: lv_n type n length 10 value '129'.

shift lv_n left deleting leading '0'.
于 2013-06-03T03:02:30.050 回答