永发信息网

ABAP/4常量定义问题

答案:3  悬赏:30  手机版
解决时间 2021-12-28 09:54
  • 提问者网友:遮云壑
  • 2021-12-27 22:52
constants c(3) type p decimals 4 value '3.12345'. 这样写ok,但是
constants c(3) type p decimals 5 value '3.12345'. 这样写就崩溃,为什么?还请高手给个解答,谢啦
最佳答案
  • 五星知识达人网友:舊物识亽
  • 2022-01-06 07:03
下面是我点F1后的帮助中P类型的取值范围的公式:
(-10^(2len -1) +1) / (10^(+dec)) to (+10^(2len -1) -1) /(10^(+dec))

变型一下,整数部分+小数部分
-10^(2len-1-dec) + 10^(-dec) 到 10^(2len-1-dec) - 10^(-dec)
在整数部分的指数中,
len = 3, dec = 4时, 2*3-1-4 = 1,存在整数部分;
len = 3, dec = 5时, 2*3-1-5 = 0,整数部分指数为0,这样就无意义了。
全部回答
  • 1楼网友:低音帝王
  • 2022-01-06 07:29
你可以写一个测试程序, ***************************** constants c(3) type p decimals 4 value '3.12345'. write c. ***************************** 运行后,你会发现输出的c为3.1235. 这是因为你在定义常量的时候,指定了小数的位数为4位,所以程序在初始化的时候,会先将3.12345进行四舍五入,达到你的定义要求,然后再把这个数赋予常量c,所以在赋值时不会有任何问题。 但是,当你定义的c的小数位为5位时,系统就不会对3.12345进行任何处理,而直接把这个数值赋予常量c。 那么p型作为Packed number,其定义为3时的实际长度为6,其中包含了小数点和符号位,实际使用可能的位数为5(仅针对本例来说),所以第二种定义方法的时候,在程序初始化,给常量赋值的时候会出现Overflow的错误。 ************************************************************************ 附件:SAP help对于P型数据的解释 All predefined ABAP types for which a length interval is specified in second column in the table are generic, which means that the length is not part of the type description. For the type p, the fractional portion is indefinite as well as the length.
  • 2楼网友:孤独的牧羊人
  • 2022-01-06 07:21
1. 你写的代码是怎样的?有可能是没注意data和types的区别。types c1(30) type c.data itab1 type table of c1.data c2(30) type c.data itab2 like table of c2.2. char30是一个data element,相当于data typechar, length 303. char是数据字典中的一种数据类型(同类的有accp、dats、quan等), c是abap中的数据类型(同类的有c、n、d、t、x、i、p、f、string、xstring)。数据字典中的数据类型是user interface层对数据的分类,用这种分类定义的table field 、structure field或data element用在abap程序时,abap处理器会把它转换成c,n,d这样的类型。在数据库中创建表时,数据字典的数据类型就会转换成数据库系统所用的类型。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯