cobol算术运算语句的高级技巧(转)

1.四舍五入处理(ROUNDED子句)

为了提高精确度,一方面可以增加小数位数,一方面可以进行四舍五入。例如:

ADD A,B TO C ROUNDED,假设C的值为186.7851,则如果C描述符为999,刚C的值为187;如果C描述符为999V9,则C的值为186^8(^代表虚拟的小数点);如果C描述符为999V99,则C的值为186^79。

2.溢出处理(ON SIZE ERROR子句)

计算结果的整数部分长度如果比结果数据项描述所规定的整数部分长,则称长度溢出。如:MULTIPLY A BY B GIVING C。如有:

77 A PIC 9v9 VALUE 1.2.

77 B PIC 9v9 VALUE 9.0.

77 C PIC 9v9.

A与B的乘积应为10.8,将此结果放在C中,但是C中放不下2位整数,于是就发生高位截断,C的值就变成0^8。出现这样的情况我们可以用溢出处理子句对程序进行处理。如:MULTIPLY A BY B GIVING C ON SIZE ERROR DISPLAY 'SIZE ERROR' STOP RUN.这个语句的意思是:A*B=>C,当C发生长度溢出错误时,显示“SIZE ERROR”字样,然后停止运行。

3.对应项间的运算(用CORRESPONDING子句)

用CORRESPONDING子句来使两个组合项中的对应项进行计算,如有下面两组描述:

02 A. | 02 B.

03 A1 PIC 9(3). 03 A1 PIC 99V99.

03 A2 PIC 9(2)V99. 03 A3 PIC 9V9.

03 A3 PIC 9V9. 03 A2 PIC 99V99.

语句:ADD CORR A TO B,则表示:

ADD A1 OF A TO A1 OF B

ADD A2 OF A TO A2 OF B

ADD A3 OF A TO A3 OF B.

4.除法语句中的余数子句(REMAINDER子句)

语句:DIVIDE 1.5 INTO 7 GIVING C,该语句只能求出商而不能求出余数,要想求出余数,则要用REMAINDER子句,如:

DIVIDE 1.5 INTO 7 GIVING C REMAINDER D.这样表示商放在C中,而余数放在D 中。

注意:(1)商和余数的值不仅取决于除数和被除数,还取决于数据部中对商和余数的描述。

           (2)如用ROUNDED子句,它只对商起作用,余数不作四舍五入处理,在计算余数时,仍按四舍五入前的值为准。

    (3) 长度溢出也只检查商的值是否溢出,而不检查余数。

 

本文转自:http://hi.baidu.com/thinkspaces/blog/item/b31648c8314987e953664f12.html

你可能感兴趣的:(cobol算术运算语句的高级技巧(转))