admin 管理员组文章数量: 887021
2024年1月14日发(作者:linux操作系统怎么截屏)
MOD: 参数1 根据参数2 整除
REM: 取余
RANGE: 取参数差
SUM: 取参数和
NUMVAL,NUMVAL-C:从编辑型数字取数
REVERSE: 字符传反向
UPPER-CASE, LOWER-CASE: 大小写转换
CURRENT-DATE, DATE-OF-INTEGER, DATE-TO-YYYYMMDD, DATEVAL,
DAY-OF-INTEGER, DAY-TO-YYYYDDD, DISPLAY-OF,
INTEGER-OF-DATE, INTEGER-OF-DAY, NATIONAL-OF,YEAR-TO-YYYY,
YEARWINDOW:: 日期相关函数
MEAN,MEDIAN, MIDRANGE: 取中间值
LENGTH: 参数长度
VARIANCE: 参数差异度
SIN, COS,TAN, ACOS, ASIN, ATAN,: 三角与反三角函数
SQRT: 平方根
STANDARD-DEVIATION: 标准差
LOG, LOG10: 对数
ANNUITY: 算年金
PRESENT-VALUE: 现值
FACTORIAL:阶乘
INTEGER :下界整数
INTEGER-PART: 取整
CHAR 转换成字符(ORD,ORD-MAX,ORD-MIN:字符转数字)
MAX,MIN:返回参数中最大/小的
WHEN-COMPILED: 程序编译日期
部分详细解释:
/s/blog_
ON 语句实现字符串中字母大小写的转换。
其关键之处是在该语句后加上LOWER-CASE,或者UPPER-CASE选项。
下面的代码使用LOWER-CASE选项,将字符串中的字母全部转换为小写格式。
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SOURCE-STR PIC X(5).
01 NEW-STR PIC X(5).
*
PROCEDURE DIVISION.
MOVE 'AB-CDE' TO SOURCE-ATR.
DISPLAY SOURCE-STR.
DISPLAY FUNCTION LOWER-CASE(SOURCE-STR).
MOVE 'Ab-Cde' TO SOURCE-STR.
DISPLAY SOURCE-STR.
DISPLAY FUNCTION LOWER-CASE(SOURCE-STR).
MOVE FUNCTION LOWER-CASE(SOURCE-STR) TO NEW-STR.
DISPLAY NEW-STR.
DISPLAY SOURCE-STR.
STOP RUN.
执行后为:
AB-CDE
ab-cde
Ab-Cde
ab-cde
Ab-Cde
LOWER-CASE 只将字符串中的大写字母转换为对应的小写形式。对于字符串中原本为小写的字母字符,以及其他字符不做处理 LOWER-CASE 只是临时对其进行转换,转换后的结果只在该条语句有效。即LOWER-CASE并不将转换结果保存到原字符串中。若要保存转换后的字符串,通常使用MOVE 语句将其保存到一个新的字符串变量中。
与LOWER-CASE对应,UPPER-CASE是将字符串中的字母转换为对应的大写形式。
2.将字符串转换为具体数值
将字符串转换为具体数值将是字符串转换中用处很大的一种转换方式。转换成具体数值后,该数值同其他普通字符一样,可以参与算术运算了。同时,当需要从键盘输入相应数值时,也更加方面一些。
此处是通过在FUNCTION语句后面加上NUMVAL或者NUMVAL-C实现的。
下面使用NUMVAL的用法。
....
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SOURCE-STR-1 PIC X(10).
01 SOURCE-STR-2 PIC X(10).
01 RESULT PIC S99V99.
01 RESULT-DPL PIC $$$.99.
*
PROCEDURE DIVISION.
MOVE '-10.50' TO SOURCE-STR-1.
MOVE '12.80' TO SOURCE-STR-2.
COMPUTE RESULT =
FUNCTION NUMVAL(SOURCE-STR-1)
+ FUNCTION NUMVAL(SOURCE-STR-2).
MOVE RESULT TO RESULT-DPL.
DISPLAY 'RESULT :',RESULT-DPL.
STOP RUN.
输出结果是:
RESULT :$2.30
FUNCTION NUMVAL 语句将以上两个变量中的字符串转换成具体数值。并将这两个具体数值相加后将结果存入RESULT变量中。RESULT 变量被定义为一个Signed
Numbers符号类型数据,保存的是具体数值。 程序最后将RESULT变量中的具体数值MOVE到RESULT-DPL变量中以用于输出。RESULT-DPL变量被定义为一个Numeric Edited Fields格式输出类型。因此,这里相当于又将具体数值转换回成了字符串。
NUMVAL-C相当于是NUMVAL的扩展。当原始字符串出现以下情况时,必须使用NUMVAL-C选项。
1)原始字符串中有货币流通符号$;
2)原始字符串中有分隔符逗号。
另外,无论NUMVAL还是NUMVAL-C都允许原字符串中出现正负号。并且,转换后的实际是指遵循原字符串中所指定的正负性。
当需要从键盘输入具体数值时,用FUNCTION 的输入方式会更加方便。假设输入数值所被保存的变量为INPUT-DATA,该变量定义如下。
01 INPUT-DATA PIC S999V99.
如令该变量中的数值通过键盘输入的语句如下。
ACCEPT INPUT-DATA FROM CONSOLE
此时用户需要在键盘上输入的数据必须严格按照INPUT-DATA定义的格式来进行。例如,当用户需要输入2.50和-100.00这两个数值时,输入方式必须为:
+002.50
-100.00
当使用将字符串转换为具体数值的方式时,代码可以做如下更改。
01 INPUT-STR PIC X(10).
01 INPUT-DATA PIC S999V99.
....
ACCEPT INPUT-STR FROM CONSOLE.
COMPUTE INPUT-DATA=FUNCTION NUMVAL(INPUT-STR).
只要如下输入方式即可:
2.50
-100
3.比较字符串的大小
通常使用FUNCTION语句,结合MAX和MIN选项实现比较字符串的大小。
下面代码通过MAX和MIN对两个字符串进行了比较。
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STR-1 PIC X(5).
01 STR-2 PIC X(5).
01 MAX-STR PIC X(5).
01 MIN-STR PIC X(5).
*
PROCEDURE DIVISION.
MOVE 'JASON' TO STR-1.
MOVE 'SIMON' TO STR-2.
MOVE FUNCTION MAX(STR-1 STR-2) TO MAX-STR.
DISPLAY 'MAX STR:',MAX-STR.
DISPLAY 'MIN STR:',MIN-STR.
STOP RUN.
运行结果如下:
MAX STR:JASON
MIN STR:SIMON
当将这两个字符串进行比较时,遵循的顺序是从左至右依次对组成字符串的单个字符进行比较。对于这两个字符,最先将'JASON'中的'J'与‘SIMON’中的'S'进行比较。由于按照字母表顺序,‘J’是排在‘S’前面的,因此'J'大于'S'。到此,比较就结束了。最后得出字符串‘JASON’大于字符串'SIMON'的。
同样,利用MAX和MIN还可以对多个字符串进行那个比较,并求得其中的最大和最小的字符串。
另外,通过MAX和MIN还可以统计出数值数据中的最值。例如如下代码;
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUM-1 PIC 9(3).
01 NUM-2 PIC 9(3).
01 NUM-3 PIC 9(3).
01 MAX-NUM PIC 9(3).
01 MAX-NUM PIC 9(3).
*
PROCEDURE DIVISION.
MOVE 123 TO NUM-1.
MOVE 4 TO NUM-2.
MOVE 567 TO NUM-3.
MOVE FUNCTION MAX(NUM-1 NUM-2 NUM-3) TO MAX-NUM.
MOVE FUNCTION MIN(NUM-1 NUM-2 NUM-3) TO MIN-NUM.
DISPLAY 'MAX NUM:',MAX-NUM.
DISPLAY 'MIN NUM:',MIN-NUM.
STOP RUN.
结果如下:
MAX NUM:567
MIN NUM:4
4.求取字符串的长度
可以通过FUNCTION LENGTH 或者LENGTH OF 得到字符串的长度或者数值数据的长度。(实际上,是将数值数据作为一个字符串来看待,只计算其占据的存储空间大小。)这两种方式得到的结果是相同的。但FUNCTION LENGTH 语句仅当相应的算术表达式允许的情况下方能使用。而LENGTH OF则要灵活的多。LENGTH OF
不仅可以用在一些内部功能的整型参数变量中,也可以用在CALL语句的参数之中。
代码如下:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SOURCE-STR PIC X(10).
01 SOURCE-NUM PIC 9(10).
01 LEN-1 PIC 99.
01 LEN-2 PIC 99.
*
PROCEDURE DIVISION.
MOVE 'ABC' TO SOURCE-STR.
MOVE 123 TO SOURCE-NUM.
COMPUTE LEN-1=FUNCTION LENGTH (SOURCE-STR).
COMPUTE LEN-2=FUNCTION LENGTH (SOUCE-NUM).
DISPLAY 'STR BY FUNCTION LENGTH:',LEN-1.
DISPLAY 'STR BY LENGTH OF:',LENGTH OF SOURCE-STR.
DISPLAY 'NUM BY FUNCTION LENGTH:',LEN-2.
DISPLAY 'NUM BY LENGTH OF:',LENGTH OF SOURCE-NUM.
STOP RUN.
结果如下:
STR BY FUNCTION LENGTH:10
STR BY LENGTH OF:10
NUM BY FUNCTION LENGTH:3
NUM BY LENGTH OF:3
版权声明:本文标题:COBOL 计算函数 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1705232090h477916.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论