基本算术运算
运算 |
用数学表达式的语句 |
用关键字的语句 |
加法 | <p> = <n> + <m>. | ADD <n> TO <m>. |
减法 | <p> = <m> - <n>. | SUBTRACT <n> FROM <m>. |
乘法 | <p> = <m> * <n>. | MULTIPLY <m> BY <n>. |
除法 | <p> = <m> / <n>. | DIVIDE <m> BY <n>. |
整除 | <p> = <m> DIV <n>. | --- |
除法余数 | <p> = <m> MOD <n>. | --- |
求幂 | <p> = <m> ** <n>. | --- |
执行字段串的算术运算
类似于用 MOVE-CORRESPONDING 语句在字段串之间复制值,可以用以下关键字,执行字段串的算术运算:
ADD-CORRESPONDING
SUBTRACT-CORRESPONDING
MULTIPLY-CORRESPONDING
DIVIDE-CORRESPONDING
添加字段顺序除基本算术运算中所述的基本加法之外,ADD 语句有几个变体,用于添加字段顺序。例如:
语法
ADD <n1> THEN <n2> UNTIL <nz> GIVING <m>. "添加字段顺序并将结果赋给另一个字段
如果 <n1>、 <n2>、 ... 、 <nz> 是在内存中相同类型和长度的等距字段序列,则进行求和计算并将结果赋给 <m>
语法
ADD <n1> THEN <n2> UNTIL <nz> TO <m>. "添加字段顺序并将结果添加到另一个字段的内容中
该语句除了将字段总和添加到 <m> 的旧内容中之外,与上面语句的工作方式相同。
所有数值数据类型的函数
以下内部函数使用所有三种数值数据类型(F、I 和 P)作为参数。
函数 |
结果 |
ABS | 参数的绝对值。 |
SIGN | 参数符号: 1 X > 0 SIGN( X) = 0 if X = 0 -1 X < 0 |
CEIL | 不小于参数的最小整数值。 |
FLOOR | 不大于参数的最大整数值。 |
TRUNC | 参数的整数部分。 |
FRAC | 参数的分数部分。 |
* / DIV MOD
DATA: pack2 TYPE p DECIMALS 4,
n TYPE f VALUE '+5.2',
m TYPE f VALUE '+1.1'.
pack2 = n / m.
WRITE pack2.
pack2 = n DIV m.
WRITE / pack2.
pack2 = n MOD m.
WRITE / pack2.
ULINE.
* MULTIPLY-CORRESPONDING
DATA: BEGIN OF rate,
usa TYPE f VALUE '0.6667',
frg TYPE f VALUE '1.0',
aut TYPE f VALUE '7.0',
END OF rate.
DATA: BEGIN OF money,
usa TYPE i VALUE 100,
frg TYPE i VALUE 200,
aut TYPE i VALUE 300,
END OF money.
MULTIPLY-CORRESPONDING money BY rate.
WRITE / money-usa.
WRITE / money-frg.
WRITE / money-aut.
ULINE.
* ADD ...
DATA: BEGIN OF series,
n1 TYPE i VALUE 10,
n2 TYPE i VALUE 20,
n3 TYPE i VALUE 30,
n4 TYPE i VALUE 40,
n5 TYPE i VALUE 50,
n6 TYPE i VALUE 60,
END OF series.
DATA sum TYPE i VALUE 100.
ADD series-n1 THEN series-n2 UNTIL series-n5 GIVING sum.
WRITE sum.
ADD series-n2 THEN series-n3 UNTIL series-n6 TO sum.
WRITE / sum.
* numeric datatypes
DATA n2 TYPE p DECIMALS 2.
DATA m2 TYPE p DECIMALS 2 VALUE '-5.55'.
n2 = ABS( m2 ). WRITE: / 'ABS: ', n2.
n2 = SIGN( m2 ). WRITE: / 'SIGN: ', n2.
n2 = CEIL( m2 ). WRITE: / 'CEIL: ', n2.
n2 = FLOOR( m2 ). WRITE: / 'FLOOR:', n2.
n2 = TRUNC( m2 ). WRITE: / 'TRUNC:', n2.
n2 = FRAC( m2 ). WRITE: / 'FRAC: ', n2.
ULINE.
* floating points
DATA: result TYPE f,
pi(10) TYPE c VALUE '3.14159265'.
result = COS( pi ).
WRITE result.
输出结果:
4.7273
4.0000
0.8000
67
200
2,100
150
350
ABS: 5.55
SIGN: 1.00-
CEIL: 5.00-
FLOOR: 6.00-
TRUNC: 5.00-
FRAC: 0.55-
-1.0000000000000000E+00