ABAP--新语法--Data Processing--第二天--Format Option 格式选项

Format Option 格式选项

在字符串模板中可以使用多种格式选项

将字符转换为数值:
DATA:lv_dec(16) TYPE p DECIMALS 2.

CALL FUNCTION 'UNITS_STRING_CONVERT'
  EXPORTING
    units_string = '123,456.78'
    dcpfm        = 'X' "这个是根据tcode:su01里的数字格式来设置,sap标准的格式有三种:空,X,Y
*   MLLN         = 'M'
*   TSND         = 'T'
  IMPORTING
    units        = lv_dec " UNITS  时参照你输入的l_p来定义的
  EXCEPTIONS
    invalid_type = 1
    OTHERS       = 2.

CURRENCY

根据指定货币 cur 调整数值的小数位,参考表 TCURX 【 CURRENCY = cur 】
DATA(lv_currency) =  |{ lv_dec  CURRENCY = 'AU5' }|.  "五位小数,输出123.45678
DATA(lv_currency1) = |{ lv_dec  CURRENCY = 'BHD' }|. "三位小数,输出12345.678

测试结果:
在这里插入图片描述

当数值为浮点数时,将不会调整小数点位置,而是在浮点数后增加0
DATA(lv_string) = '123456.78'.
DATA(lv_dec1) = CONV  f( lv_string ).
DATA(lv_currency2) = |{ lv_dec1 CURRENCY = 'BHD' }|. "三位小数,输出123456.780

测试结果:
在这里插入图片描述

COUNTRY ★

根据指定国家 cty 格式化数据(数值/日期/时间),参考表 T005X 【 COUNTRY = cty 】
表 T005X 中字段XDEZP是十进制格式,是否勾选十进制格式,输出格式会有差别
   DATA(lv_country) = |{ lv_dec COUNTRY = 'CN ' }|.    "数值,没有勾上十进制,"."作为千分号,","作为小数间隔
   DATA(lv_country1) = |{ lv_dec COUNTRY = 'AU ' }|.   "数值,勾上了十进制,","作为千分号,"."作为作为小数间隔
   DATA(lv_country2) = |{ sy-datum COUNTRY = 'CN ' }|. "日期
   DATA(lv_country3) = |{ sy-uzeit COUNTRY = 'CN ' }|. "时间

测试结果:
在这里插入图片描述

ALPHA ★

添加/移除前导零,返回值与字段类型一致,可使用CONV转换成其他的类型进行处理。默认不做变更(RAW)【 ALPHA = [ IN | OUT | RAW ]DATA(lv_alpha) = |{ CONV char4( '1' ) ALPHA = IN }|. “添加前导0
DATA(lv_alpha1) = |{  '0001' ALPHA = OUT }|.         “移除前导0

测试结果:
在这里插入图片描述

NUMBER/DATE/TIME ★

设置数值/日期/时间显示格式
RAW:默认值,【数值】使用 . 作为小数点,且没有千分符 【日期/时间】直接输出内容
USER:使用用户设置
ENVIRONMENT:使用系统环境设置
ISO:仅用于设置【日期/时间】,使用 ISO 标准格式,yyyy-mm-dd / hh:mm:ss
DATA(lv_raw) = |{ lv_dec NUMBER = raw }|.             "默认的数值
DATA(lv_number) = |{ lv_dec NUMBER = ENVIRONMENT }|.  "系统环境下的数值
DATA(lv_date) = |{ sy-datum DATE = USER }|.           "用户设置的日期
DATA(lv_time) = |{ sy-uzeit TIME = ISO }|.            "ISO格式下的时间

测试结果:
在这里插入图片描述

TIMESTAMP

设置时间戳格式
SPACE:使用空格连接 ISO 格式下的日期和时间,yyyy-mm-dd hh:mm:ss
ISO:使用 ISO 标准格式,yyyy-mm-ddThh:mm:ss
RAW:无格式,直接输出
USER:使用用户设置
ENVIRONMENT:使用系统环境设置
DATA(lv_stamp) = CONV timestamp( '20190601181609' ).
DATA(lv_timestamp_space) = |{ lv_stamp TIMESTAMP = SPACE }|.
DATA(lv_timestamp_iso) = |{ lv_stamp   TIMESTAMP = ISO }|.
DATA(lv_timestamp_raw) = |{ lv_stamp  }|."当无格式时,在{}中填写TIMESTAMP = RAW则会报错,所有不需要写任何格式
DATA(lv_timestamp_USER) = |{ lv_stamp  TIMESTAMP = USER }|.
DATA(lv_timestamp_EVI) = |{ lv_stamp   TIMESTAMP = ENVIRONMENT }|.

测试结果:
在这里插入图片描述

TIMEZONE

将时间戳转换成指定时区的时间戳,参考表 TTZZ 【 TIMEZONE = tz 】
例:
DATA(lv_timezone) = |{ lv_stamp TIMEZONE = 'CET' }|.
DATA(lv_timezone1) = |{ lv_stamp TIMEZONE = 'JAPAN' }|.

测试结果:
在这里插入图片描述

以下格式选项可以用于所有类型

WIDTH

预定义字符串长度,当实际长度超出 len 时,按实际长度取值,否则按长度 len 在右侧填充空格 【 WIDTH = len 】

ALIGN

定义字符串对齐方式,适用于使用了 WIDTH 选项且预定义长度超出实际长度的情况【 ALIGN = [ LEFT | CENTER | RIGHT ] 】

PAD

使用指定字符串中的第一位字符填充剩余的位置,适用于使用了 WIDTH 选项且预定义长度超出实际长度的情况,默认会使用空格填充 【 PAD = c 】

CASE ★

将字符串进行大小写转换,默认为 RAW,该选项不会更改大小写格式,[CASE = [ RAW | LOWER | UPPER ] ]

DATA(lv_width) = |"{ 'A' WIDTH = 2 }BCD"|. “输出结果中A后跟着一个空格,再加上BCD
DATA(lv_align) = |"{ 'A' WIDTH = 2 ALIGN = RIGHT }BCD"|. “输出结果中,第一个字符为空格,A在长度为2的字符中靠右,第二个字符为A
DATA(lv_pad) = |"{ 'A' WIDTH = 2 ALIGN = RIGHT PAD = '@' }BCD"|.A靠右,空格用@填充
DATA(lv_case) = |"{ 'A' CASE = LOWER }BCD"|. ” ”将A转换为小写a

测试结果:
在这里插入图片描述

SIGN

用来调整数值类型符号的显示
LEFT/RIGHT:不显示正号,将符号放置在数值左侧/右侧
LEFTPLUS/RIGHTPLUS:显示正号,并将符号放置在数值左侧/右侧
LEFTSPACE/RIGHTSPACE:用空格代替正号显示,并将符号放置在数值左侧/右侧
例:
DATA(lv_sign_default) = |"{ -1 }"|.
DATA(lv_sign_left) = |"{ 1 SIGN = LEFT }"|.
DATA(lv_sign_leftplus) = |"{ 1 SIGN = LEFTPLUS }"|.
DATA(lv_sign_leftspace) = |"{ 1 SIGN = LEFTSPACE }"|.
DATA(lv_sign_right) = |"{ -1 SIGN = RIGHT }"|.
DATA(lv_sign_rightplus) = |"{ -1 SIGN = RIGHTPLUS }"|.
DATA(lv_sign_rightspace) = |"{ -1 SIGN = RIGHTSPACE }"|.

测试结果:
在这里插入图片描述

EXPONENT

用于浮点型,设置指数【 EXPONENT = exp 】

DECIMALS

用于数值类型,设置小数位数【 DECIMALS = dec 】

ZERO ★

用于数值类型,设置显示/隐藏零【 ZERO = [ YES | NO ] 】

XSD

当数据参照以下 domain 时,会根据规则转换成相应的 XML 数据【 XSD = [ YES | NO ] 】
在这里插入图片描述

例:
DATA(lv_exponent) = |{ CONV f( 1 / 3 ) EXPONENT = -1 }|.
DATA(lv_decimal) = |{ CONV f( 1 / 3 ) DECIMALS = 2 }|.
DATA(lv_zero) = |{ 0 ZERO = NO }|.
DATA(lv_xsd) = |{ CONV xsdboolean( abap_true ) }, { CONV xsdboolean( abap_true ) XSD = YES }|. 

测试结果:
在这里插入图片描述

STYLE

该选项用于设置浮点型格式
SIMPLE:默认选项,使用使用预定义格式
SIGN_AS_POSTFIX:在数值右侧添加负号/空格,并截断小数位尾部的 0
SCALE_PRESERVING:范围保护,小数位尾部的 0 不会被截断
SCIENTIFIC:科学计数法,结果至少有 2 位带符号的指数,如果不指定 EXPONENT 选项,则结果的整数位始终只有一位
SCIENTIFIC_WITH_LEADING_ZERO:整数位只能是 0 ,小数第一位不为 0
SCALE_PRESERVING_SCIENTIFIC:范围保护,类型为 decfloat16 时,指数位数为 3,类型为 decfloat34 时,指数位数为 4
ENGINEERING:整数位范围为 1 - 999 ,指数必须是 3 的整数倍

例:
DATA(lv_f) = CONV f( -1 / 30 ). 
DATA(lv_s1) = |{ lv_f STYLE = SIMPLE }|.
DATA(lv_s2) = |{ lv_f STYLE = SIGN_AS_POSTFIX }|.
DATA(lv_s3) = |{ lv_f STYLE = SCALE_PRESERVING }|.
DATA(lv_s4) = |{ lv_f STYLE = SCIENTIFIC }|.
DATA(lv_s5) = |{ lv_f STYLE = SCIENTIFIC_WITH_LEADING_ZERO }|.
DATA(lv_s6) = |{ lv_f STYLE = SCALE_PRESERVING_SCIENTIFIC }|.
DATA(lv_s7) = |{ lv_f STYLE = ENGINEERING }|. 

测试结果:
在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值