Cobol 如何转换字母数字并将其用于计算?
我将读取一个顺序文件,其中包含一些字符串,如“79.85”、“1000”、“212.34” 我想将字母数字转换成这种格式的数字00000.00 我需要将这些数字相加,并将其移动到格式为0000000.00的字段中 我试过:Cobol 如何转换字母数字并将其用于计算?,cobol,openvms,Cobol,Openvms,我将读取一个顺序文件,其中包含一些字符串,如“79.85”、“1000”、“212.34” 我想将字母数字转换成这种格式的数字00000.00 我需要将这些数字相加,并将其移动到格式为0000000.00的字段中 我试过: 01 WS_AMOUNT_TXT PIC X(8). 01 WS_AMOUNT PIC 9(5).9(2). MOVE WS_AMOUNT_T
01 WS_AMOUNT_TXT PIC X(8).
01 WS_AMOUNT PIC 9(5).9(2).
MOVE WS_AMOUNT_TXT(1:8) TO WS_AMOUNT(1:8).
我得到的是出乎意料的,字符串也是一样的。它是左对齐,没有前导零显示
如何使其正确对齐并具有前导零
编辑:我尝试了NELB的建议,但不幸失败:
01 WS_AMOUNT_NUM PIC 9(5)V9(2).
01 WS_AMOUNT_DISPLAY PIC 9(5).9(2).
01 WS_AMOUNT_TXT PIC X(8).
DISPLAY WS_AMOUNT_TXT
COMPUTE WS_AMOUNT_NUM = FUNCTION NUMVAL (WS_AMOUNT_TXT)
MOVE WS_AMOUNT_NUM TO WS_AMOUNT_DISPLAY
79.85尝试使用内在函数 进行转换。类似于
01 WS-AMOUNT-TEXT PIC X(8).
01 WS-AMOUNT-NUM PIC 9(5)V9(2).
01 WS-AMOUNT-DISPLAY PIC 9(5).9(2).
COMPUTE WS-AMOUNT-NUM = FUNCTION NUMVAL (WS-AMOUNT-TEXT)
MOVE WS-AMOUNT-NUM TO WS-AMOUNT-DISPLAY
NUMVAL将数字的文本表示形式转换为数字类型。在计算中使用数值数据类型:pic9(5)V9(2)
。然后使用MOVE
将数值结果转换为具有显式小数点的可显示金额
注意:如果要执行大量计算,最好使用压缩十进制数据类型来提高效率。使用重定义
01 WS-AMOUNT-TXT-GRP。
03 WS-数量图X(4)。
01 WS-AMOUNT-NUM重新定义WS-AMOUNT-TXT-GRP PIC 9(4)
在WS-AMOUNT-TXT-GRP或WS-AMOUNT中重新应用值后,自动在WS-AMOUNT-NUM中复制值失败,因为WS-AMOUNT-TXT中的任何内容都无法转换为有效的数值。除了数字、小数点和/或空格之外,该字段中还有一些“垃圾”。在尝试转换之前,请先清理WS_AMOUNT_TXT。您是否阅读了问题?输入是左对齐的“数字”,可能包含和实际小数点。它们需要加在一起。你的建议行不通。