1

我将读取一个包含一些字符串的顺序文件,例如“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).

我得到的是出乎意料的,字符串是一样的。它是左对齐的,没有前导零显示。

我怎样才能使它正确对齐并有前导零?

编辑:我尝试了 NealB 的建议,但遗憾的是失败了:

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 << 这是我调用 DISPLAY WS_AMOUNT_TXT 然后它崩溃时显示的内容。

%COB-F-NUMVALARGINV,NUMVAL或NUMVAL-C参数无效%TRACE-F-TRACEBACK,符号堆栈转储如下图像模块例行线相对PC ABS PC DEC $ COBRTL 0 000000000001F2B8 000000007C2F72B8 DEC $ COBRTL 0 0000000000014764 000000007C2EC764 DEC $ COBRTL 0 0000000000014C44 000000007C2ECC44 DAILY_SPLIT_REFUND_ADJ DAILY_SPLIT_REFUND_ADJ DAILY_SPLIT_REFUND_ADJ 121 00000000000003C4 00000000000303C4 DAILY_SPLIT_REFUND_ADJ 0 00000000000313A0 00000000000313A0 0 FFFFFFFF80271EF4 FFFFFFFF80271EF4

4

2 回答 2

4

尝试使用内部函数NUMVAL 进行转换。就像是...

    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 将数字的文本表示形式转换为数字类型。使用数字数据类型:PIC 9(5)V9(2)在您的计算中。然后用于MOVE 将数值结果转换为带有显式小数点的可显示数量。

注意:如果要执行大量计算,最好使用PACKED-DECIMAL数据类型来提高效率。

于 2011-07-27T15:02:26.950 回答
0

使用重新定义。

01 WS-数量-TXT-GRP。03 WS-AMOUNT PIC X(4)。01 WS-AMOUNT-NUM 重新定义了 WS-AMOUNT-TXT-GRP PIC 9(4)。

在 WS-AMOUNT-TXT-GRP 或 WS-AMOUNT 中 re=licating 值后,值将自动复制到 WS-AMOUNT-NUM

于 2017-01-16T17:17:05.917 回答