View previous topic :: View next topic |
Author |
Message |
Srishti Rawat Beginner
Joined: 03 Nov 2021 Posts: 20 Topics: 6
|
Posted: Fri Mar 24, 2023 6:25 am Post subject: COBOL Packed to display numeric data conversion |
|
|
Hi Team,
I need to convert packed decimal to signed numeric decimal number in my COBOL program.
I am receiving the amount field from input file as packed decimal s9(13)v9(2) which gets displayed in my output file like below:
00000000005907P
But I want this to display in my output file like
-590.77.
I tried moving it to zoned decimal and than to numeric edit but still the sign is missing.
Can anyone please help me with the COBOL code to convert it so that it should get displayed properly in my output file.
Thanks,
Srishti |
|
Back to top |
|
|
kolusu Site Admin
Joined: 26 Nov 2002 Posts: 12376 Topics: 75 Location: San Jose
|
Posted: Fri Mar 24, 2023 12:00 pm Post subject: |
|
|
Srishti Rawat,
Try this
Code: |
01 WS-PACKIN PIC S9(13)V9(2) COMP-3.
01 WS-DISPOUT PIC +++++++++++++.99.
MOVE WS-PACKIN TO WS-DISPOUT
DISPLAY WS-DISPOUT
|
_________________ Kolusu
www.linkedin.com/in/kolusu |
|
Back to top |
|
|
Srishti Rawat Beginner
Joined: 03 Nov 2021 Posts: 20 Topics: 6
|
Posted: Sat Mar 25, 2023 10:47 am Post subject: |
|
|
Hi Kolusu,
Thanks for the reply. I tried it, but the decimal places are varying. Also for the negative number this is showing positive sign.
For ex, for 00000000005907P,
output : +59077.00
expected result: -590.77
Please suggest. |
|
Back to top |
|
|
kolusu Site Admin
Joined: 26 Nov 2002 Posts: 12376 Topics: 75 Location: San Jose
|
Posted: Sat Mar 25, 2023 5:37 pm Post subject: |
|
|
Srishti Rawat wrote: | I need to convert packed decimal to signed numeric decimal number in my COBOL program.
I am receiving the amount field from input file as packed decimal s9(13)v9(2) which gets displayed in my output file like below:
00000000005907P
|
Srishti Rawat,
Looking at the data you are showing it is not COMP-3 aka Packed decimal. For comp-3 a negative number will have D or B an lower nibble of the data and positive data will have C or F as the sign
You sample data of 00000000005907P meant it is ZONED decimal data. here is a representation of the zoned decimal data.
Code: |
ABCDEFGHI}JKLMNOPQR
CCCCCCCCCCDDDDDDDDDD
01234567890123456789
|
Hex C0 thru C9 are positive numbers and D0 thru D9 are negative numbers. So -7 would look as 00000000000000P and so a -590.77 would look as 00000000005907P. The same number in packed decimal format would like as X'000000000059077D'
So understand the difference between the numeric items and then post it properly.
Still the code is the same
Code: |
01 WS-ZONEDN PIC S9(13)V9(2).
01 WS-DISPOUT PIC +++++++++++++.99.
MOVE WS-ZONEDN TO WS-DISPOUT
DISPLAY WS-DISPOUT
|
_________________ Kolusu
www.linkedin.com/in/kolusu |
|
Back to top |
|
|
Srishti Rawat Beginner
Joined: 03 Nov 2021 Posts: 20 Topics: 6
|
Posted: Sun Mar 26, 2023 10:30 am Post subject: |
|
|
Hi Kolusu,
I appreciate the explanation. I tried this with both packed and zoned decimal. Before posting this query in this forum, I already tried moving the variable to PIC -------------.99. which didnt work, was having the same issue.
For both of them(packed/zoned decimal) the results are as below:
Code: | 01 WS-AMTPK PIC S9(13)V9(2) COMP-3.
01 WS-AMTZN PIC S9(13)V9(2).
01 WS-DISPOUT PIC +++++++++++++.99. |
Code: | MOVE WS-AMT TO WS-AMTPK.
MOVE WS-AMTPK TO WS-DISPOUT.
DISPLAY WS-DISPOUT. |
Result: +59077.00
Code: | MOVE WS-AMT TO WS-AMTZN.
MOVE WS-AMTZN TO WS-DISPOUT.
DISPLAY WS-DISPOUT. |
Result: +59077.00
Here, WS-AMT is variable from input file copybook where it is defined as X(15). This file is an output from another program where WS-AMT is defined as s9(13)v9(2). In the input file this amount field comes in zoned decimal 00000000005907P.
Also when I tried to display WS-AMTZN, it showed value 00000000590770{, not sure why it is adding last two zeroes.
I hope I am able to explain the scenario well.
[/code] |
|
Back to top |
|
|
kolusu Site Admin
Joined: 26 Nov 2002 Posts: 12376 Topics: 75 Location: San Jose
|
Posted: Sun Mar 26, 2023 11:44 am Post subject: |
|
|
Srishti Rawat wrote: |
Here, WS-AMT is variable from input file copybook where it is defined as X(15). This file is an output from another program where WS-AMT is defined as s9(13)v9(2). In the input file this amount field comes in zoned decimal 00000000005907P.
|
Srishti Rawat,
What version of COBOL are you running? If you are running 6.xx and higher what is the setting for ZONEDATA ?
Try this sample code and tell me what it produces.
Code: |
01 WS-CHAR PIC X(15).
01 WS-ZONEDN REDEFINES WS-CHAR PIC S9(13)V9(2).
01 WS-DISPOUT PIC +++++++++++++.99.
MOVE '00000000005907P' TO WS-CHAR
MOVE WS-ZONEDN TO WS-DISPOUT
DISPLAY WS-DISPOUT
|
_________________ Kolusu
www.linkedin.com/in/kolusu |
|
Back to top |
|
|
|
|