View previous topic :: View next topic

Author 
Message 
jackzhang75
Active User
Joined: 09 Jun 2014 Posts: 119 Location: CT




Hello experts,
I am reading the following statment and i am not sure why we must have the pack decimal in odd digit? Is following statement is ture that you can only have odd number of digits in hardware ? Can you give me a example to show why it say that ?? Thank you very much!
Code: 
RULES(NOEVENPACK) This complier option will tell you if you accidentally define a Pack Decimal data item within even number of digits. You can only have odd number of digits in hardware. If you have one byte you have one digit , 2 byte you have 3 digit, 3 byte >5 digit. 
Thanks 

Back to top 


Robert Sample
Global Moderator
Joined: 06 Jun 2008 Posts: 8569 Location: Dubuque, Iowa, USA




Packed decimal variables should have an odd number of digits due to the internal representation. The value 12345 in zoned decimal is X'F1F2F3F4F5' (if unsigned). The same value in packed decimal is X'12345F'. Packed decimal variables that have an odd number of digits will fit precisely into the hexadecimal bytes.
If you have a packed decimal variable with an even number of digits, that extra digit requires an extra byte to store the value. While it is not illegal to have an even number of digits, there are extra pseudoassembler statements generated in COBOL to account for the extra digit (and make sure the value does not exceed the PICTURE size if TRUNC(STD) is being used). It is more efficient to have the odd number of digits for a packed decimal variable (and note that this ONLY holds true for packed decimal variables). 

Back to top 


jackzhang75
Active User
Joined: 09 Jun 2014 Posts: 119 Location: CT




Robert, thank you very much for you answer. Could you give me an example of COBOL code to illustrate odd and even pack decimal ? I think i got the idea but still not sure what is the right code should be? 

Back to top 


Robert Sample
Global Moderator
Joined: 06 Jun 2008 Posts: 8569 Location: Dubuque, Iowa, USA




I'm not really sure what you think an example is going to show you:
Code: 
05 WSODD PIC S9(07) COMP3.
05 WSEVEN PIC S9(08) COMP3. 
You should always use an odd number of digits, like WSODD, and not an even number of digits like WSEVEN. 

Back to top 


Bill Woodger
Moderator Emeritus
Joined: 09 Mar 2011 Posts: 7311 Location: Inside the Matrix




jackzhang75,
Please don't post questions in multiple places at the same time. You posted it on StackOverflow, and just wasted either Robert's or my time. That doesn't tend to help you get answers when next you ask. 

Back to top 


jackzhang75
Active User
Joined: 09 Jun 2014 Posts: 119 Location: CT




Oh.. i am really sorry and i will not post it in anohter place again. Again very appreicated for your answer really help me alot! 

Back to top 


