数字数据(digital data)在
数据通信中也称为
数字量,相对于
模拟量而言,指的是
取值范围是离散的变量或者
数值。
定义数字数据
数字
数据项用PICTURE子句定义。数据描述中的每个9代表一个
十进制位。
可以出现的特殊含义字符有: P指示前导0和尾部0 S指示符号,正号或负号 V隐含的
小数点数据是关于某些方面的一组数字。
显示数字数据
为了让数字数据在显示和打印的时候更容易阅读,可以使用编辑标志(如:
小数点,
逗号,美元符号和借方符号贷方符号)格式化数字
数据项。
例如,在下面的代码中Edited-price就是编辑的数字数据项:
05 Price Pic 9(5)v99.
05 Edited-price Pic ,zz9.99.
. . .
Move Price To Edited-price
Display Edited-price
Move Edited-price to Price
Display Price
存储
COBOL程序中的数字数据可以以下格式存储: 外部
十进制(USAGE DISPLAY) 外部
浮点型(USAGE DISPLAY) 内部十进制(USAGE PACKED-DECIMAL)
二进制(USAGE BINARY) 本地二进制(USAGE COMP-5) 内部浮点型(USAGE COMP-1, USAGE COMP-2)
COMP和COMP-4等价于
BINARY(二进制),COMP-3等价于(打包十进制)PACKED-DECIMALCOMP。
算术运算
OBNOL
算术运算有以下几种方式: COMPUTE, ADD, SUBTRACT, MULTIPLY, 和 DIVIDE 语句 数字
内置函数 语言环境中可调用的服务
4.4.1 算术语句 COMPTE语句把
表达式的值赋给一个或多个
数据项。用COMPUTE语句可以轻松的把算术操作组合在一起,而不受ADD,SUBSTRACT, MULTIPLY, 和 DIVIDE语句那样的结果存放限制。
4.4.1.1 ADD语句 ADD 语法1:
ADD identifier-1,identifier-2,… TO identifier-n [ROUNDED]
[ON SIZE ERROR statement-1]
[NOT ON SIZE ERROR statement-2]
[END-ADD]
例子:
ADD NUM1 TO NUM2.
ADD NUM1, 10 TO NUM2.
ADD NUM1, NUM2 TO NUM3 ON SIZE ERROR PERFORM 100-ERROR.
ADD 语法2:
ADD identifier-1,identifier-2,… [TO] identifier-n GIVING identifier-m [ROUNDED]
[ON SIZE ERROR statement-1]
[NOT ON SIZE ERROR statement-2]
[END-ADD]
例子:
ADD NUM1 TO NUM2 GIVING NUM3.
ADD NUM1, NUM2 GIVING NUM3.
ADD NUM1, 10 TO NUM2 GIVING NUM3.
ADD 语法3:
ADD CORR identifier-1 TO identifier-2 [ROUNDED]
[ON SIZE ERROR statement-1]
[NOT ON SIZE ERROR statement-2] [END-ADD]
例子:
03 CURRENT-MONTH.
05 PAY PIC 9(3)V9(2).
05 TAX PIC 9(2)V9(2).
03 YTD.
05 PAY PIC 9(3)V9(2).
05 TAX PIC 9(2)V9(2).
ADD CORR CURRENT-MONTH TO YTD.
4.4.1.2 SUBTRACT语句 SUBTRACT 语法1:
SUBTRACT identifier-1, identifier-2,… FROM identifier-n
[ROUNDED]
[ON SIZE ERROR statement-1]
[NOT ON SIZE ERROR statement-2]
[END-SUBTRACT]
例子:
SUBTRACT NUM1 FROM NUM2.
SUBTRACT 语法2:
SUBTRACT identifier-1 identifier-2,… FROM identifier-n
GIVING identifier-m [ROUNDED]
[ON SIZE ERROR statement-1]
[NOT ON SIZE ERROR statement-2]
[END-SUBTRACT]
例子:
SUBTRACT NUM1 FROM NUM2 GIVING NUM3.
SUBTRACT 语法3:
SUBTRACT CORR identifier- 1 FROM identifier- 2
[ROUNDED]
[ON SIZE ERROR statement-1]
[NOT ON SIZE ERROR statement-2]
[END-SUBTRACT]
例子:
SUBTRACT CORR REC1 FROM REC2.
4.4.1.3 MULTIPLY语句 MULTIPLY 语法1:
MULTIPLY identifier- 1 BY identifier-2
[ROUNDED]
[ON SIZE ERROR statement- 1]
[NOT ON SIZE ERROR statement-2]
[END-MULTIPLY]
例子:
MULTIPLY NUM1 BY NUM2.
MULTIPLY 语法2:
MULTIPLY identifier- 1 BY identifier- 2
GIVING identifier- 3
[ROUNDED]
[ON SIZE ERROR statement-1]
[NOT ON SIZE ERROR statement-2]
[END-MULTIPLY]
例子:
MULTIPLY NUM1 BY NUM2 GIVING NUM3.
4.4.1.4 DIVIDE语句 DIVIDE 语法1:
DIVIDE identifier- 1 INTO identifier-2
[ROUNDED]
[ON SIZE ERROR statement-1]
[NOT ON SIZE ERROR statement-2]
[END-DIVIDE]
例子:
DIVIDE NUM1 INTO NUM2.
DIVIDE 语法2:
DIVIDE identifier-1 INTO identifier-2
GIVING identifier-3
[ROUNDED]
[ON SIZE ERROR statement- 1]
[NOT ON SIZE ERROR statement- 2]
[END-DIVIDE]
例子:
DIVIDE NUM1 INTO NUM2 GIVING NUM3.
DIVIDE 语法3:
DIVIDE identifier- 1 BY identifier- 2
GIVING identifier- 3
[ROUNDED]
[ON SIZE ERROR statement- 1]
[NOT ON SIZE ERROR statement-2]
[END-DIVIDE]
例子:
DIVIDE NUM1 BY NUM2 GIVING NUM3.
DIVIDE 语法4:
DIVIDE identifier- 1 INTO identifier-2
GIVING identifier-3
[ROUNDED]
REMAINDER identifier-4
[ON SIZE ERROR statement-1]
[NOT ON SIZE ERROR statement-2]
[END-DIVIDE]
例子:
DIVIDE NUM1 INTO NUM2 GIVING NUM3 REMAINDER NUM4.
DIVIDE 语法5:
DIVIDE identifier-1 BY identifier-2
GIVING identifier-3
[ROUNDED]
REMAINDER identifier-4
[ON SIZE ERROR statement-1]
[NOT ON SIZE ERROR statement-2]
[END-DIVIDE]
例子:
DIVIDE NUM1 BY NUM2 GIVING NUM3 REMAINDER NUM4.
4.4.1.5 COMPUTE语句 COMPUTE 语法:
COMPUTE identifier-1 [ROUNDED], identifier-2 [ROUNDED],…
= arithmetic-expression
[ON SIZE ERROR statement-1]
[NOT ON SIZE ERROR statement-2]
[END-COMPUTE]
例子:
COMPUTE RESULT=NUM1*NUM2+NUM3-NUM4.
4.4.2
算术表达式 允许数字
数据项出现的地方都可以替换为算术表达式。
算术表达式可以有
正负号(+,-),幂
指数符号(**),
除号或
乘号(/,*)和
加号或减号(+,-)。
4.4.3 数字
内置函数 数字内置函数只能出现在数字
表达式允许出现的地方。
数字内置函数返回一个有符号的数值。函数本身可以看成临时数字数据项。
下面是一些数字内置函数: 数字处理: LENGTH, MAX, MIN, NUMVAL, NUMVAL-C, ORD-MAX, ORD-MIN 日期和时间: CURRENT-DATE, DATE-TO-YYYYMMDD, …etc 数学: INTEGER, LOG, SUM, SIN, COS, MOD, …etc.
例子:
COMPUTE X = LENGTH (RECORD).
COMPUTE Y = MAX (X, Y).