Cobol 如何转换字母数字并将其用于计算?

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

我将读取一个顺序文件,其中包含一些字符串,如“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_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。您是否阅读了问题?输入是左对齐的“数字”,可能包含和实际小数点。它们需要加在一起。你的建议行不通。