Solved

Convert binary to numeric dynamically

Posted on 2006-10-25
4
567 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 500 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

ScreenConnect 6.0 Free Trial

Check out the updates in one game-changing release, ScreenConnect 6.0, based on partner feedback. New features include a redesigned UI that improves session organization and overall user experience. See the enhancements for yourself!

Question has a verified solution.

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

Suggested Solutions

Each year, investment in cloud platforms grows more than 20% (https://www.immun.io/hubfs/Immunio_2016/Content/Marketing/Cloud-Security-Report-2016.pdf?submissionGuid=a8d80a00-6fee-4b85-81db-a4e28f681762) as an increasing number of companies begin to…
When you have clients or friends from around the world, it becomes a challenge to arrange a meeting or effectively manage your time. This is where Outlook's capability to show 2 time zones in one calendar comes in handy.
This Micro Tutorial hows how you can integrate  Mac OSX to a Windows Active Directory Domain. Apple has made it easy to allow users to bind their macs to a windows domain with relative ease. The following video show how to bind OSX Mavericks to …
Established in 1997, Technology Architects has become one of the most reputable technology solutions companies in the country. TA have been providing businesses with cost effective state-of-the-art solutions and unparalleled service that is designed…

777 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