Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
?
Solved

Convert binary to numeric dynamically

Posted on 2006-10-25
4
Medium Priority
?
585 Views
Last Modified: 2012-05-05
I have a program which recieves a variable of type 9B.  The underlying variable can be of any numeric precision and scale e.g. (8,0 or 5,3, etc...). How can I convert this value into a character array?

If i use %editc(variable, 'X') I do not get the right value.

Any help would be greatly appreciated!
0
Comment
Question by:stu_pb
4 Comments
 
LVL 3

Author Comment

by:stu_pb
ID: 17804733
I should note that I can make this work for non packed numerics, but I don't know how to make it work for packed numerics.

Thanks.
0
 
LVL 14

Expert Comment

by:daveslater
ID: 17805893
hi try somehing like

 ** working storage for packed field
D Pak1            ds                                                  
D  Val                          15p 0 Inz      
 ** resulting numeri                        
D Zone            s             30S15 Inz        
 ** offset to calulate length                    
D GblpOset        s             10i 0                                  
 ** packed field length (no bytes)
DGblPLen          s             10i 0                                  
DBufferOffSet     s             10i 0 Inz(20)    
                     
DPackDecPos       s             10i 0 Inz(%DecPos(MyPackField))        
DPackFieldLen     s             10I 0 Inz(7)      
 ** packed field in alpha format                    
D Buf             ds           100                                    
D  MypackField                   7p 2 Inz(52.51) Overlay(Buf:20)    
 ** ws to calculated
 D Div             s             10i 0              
 D                                                  
  /Free                                            
    *inlr = *on ;              
     //  set  packed length
     gblPLen = (PackFieldLen + 1 ) / 2 ;            

     // set offset to ds
     gblpOset = 9 - GblPLen ;                      
 
       // map character to pack ds                                            
        %subst(Pak1    : GblpOset    : GblPLen)  =  
        %subst(Buf     : BufferOffSet: GblPlen) ;  

        // set percision
        Div = 10 ** PackDecPos ;              

        // create zoned numeric      
        Zone = Val / xx ;                          
  /End-Free                                        

dave
 
0
 
LVL 27

Accepted Solution

by:
tliotta earned 1500 total points
ID: 17806216
I think I'd just convert immediately to a 9P0 (packed decimal with the same number of digits). Once there, conversion to any other numeric form (including scale) is simply a matter of dividing by the appropriate power of 10 with an EVAL. But even that might not be necessary.

A B-type field is allowed to have decimal fractions. As such, I would hope that the compiler would generate the correct packed intermediate field during the division anyway.

It should be easy to code a test program and run in debug a few times. Set the 9B0 field value to different amounts and see how various calcs result.

Tom
0
 

Expert Comment

by:techcons
ID: 17846409
What version of the operating system are you on? V5R2/V5R3/V5R4? You can use the %CHAR BIF to create a character field.
0

Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In my humble opinion (IMHO), TouchDown from Symantec is the best in class for this type of application, but Symantec has end-of-lifed it and although one can keep using it, it will no longer be supported or upgraded.  Time to look for alternatives t…
The number of companies understanding the potential of IoT on B2B market is growing with each day. And yet only a small share of IoT developers have managed to equalize incomes and stay competitive in the international market.
When cloud platforms entered the scene, users and companies jumped on board to take advantage of the many benefits, like the ability to work and connect with company information from various locations. What many didn't foresee was the increased risk…
With just a little bit of  SQL and VBA, many doors open to cool things like synchronize a list box to display data relevant to other information on a form.  If you have never written code or looked at an SQL statement before, no problem! ...  give i…
Suggested Courses

579 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question