我将读取一个顺序文件,其中包含一些字符串,如“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,符号堆栈转储如下 图像模块例程行rel 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
答案 0 :(得分:3)
尝试使用内在函数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
数据类型来提高效率。
答案 1 :(得分:0)
使用重新定义。
01 WS-AMOUNT-TXT-GRP。 03 WS-AMOUNT PIC X(4)。 01 WS-AMOUNT-NUM REDEFINES WS-AMOUNT-TXT-GRP PIC 9(4)。
在WS-AMOUNT-TXT-GRP或WS-AMOUNT中重新获得值后,自动值将在WS-AMOUNT-NUM中复制