× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.


  • Subject: RE: Character to Numeric
  • From: Joel Fritz <JFritz@xxxxxxxxxxxxxxxx>
  • Date: Tue, 29 Feb 2000 10:12:34 -0800

Here's some pseudo code based on the following assumptions:

You need to decide on the largest number of digits you're going to handle.
If you're converting decimal numbers, you need to consider the number of
decimal places.  The character string parm must be the size of the numeric
return value plus additional bytes for commas or other acceptable
separators, a sign, and a decimal point.  You have to decide what characters
are valid for the sign.

The procedure will return an error code of indicator type (N.)  It will
accept two parms, the character string (const) and a numeric value to
receive the value of the conversion.

The numeric parm will be a zoned numeric that has a character overlay
defined within the procedure that is initialized to *zeroes.

Check for characters other than valid separators, signs, decimal point or
numerics.
  If invalid characters found, return *off

Check for a sign.

Find the offset of the decimal point.  
  Move the numeric characters to the left of the decimal point to their
appropriate positions in the      
     character overlay, skipping separators.
  Move the numeric characters to the right of the decimal point to their
appropriate positions in    
     the character overlay.

Move the character overlay to the numeric parm.
  
If the sign is negative, multiply the numeric value by -1.

Return *on.

I've probably missed a few things.  I'll bet there's some less obvious
method that uses the internal representation of the numbers.  


> -----Original Message-----
> From: L. S. Russell [mailto:leslier@datrek.com]
> Sent: Tuesday, February 29, 2000 8:13 AM
> To: RPG400-L@midrange.com
> Subject: Re: Character to Numeric
> 
> 
> This isn't pretty and it is lacking alot but it is a start. 
> 
> 
> DStrtonum         PR            10  0                         
>           
> D Str                           10A   Value                   
>           
>                                                               
>           
> DTestNum          S             10  0 Inz(*zeros)             
>           
>                                                               
>           
>  *main()                                                      
>           
>                                                               
>           
> C                   eval      TestNum = Strtonum('1234')      
>           
> C                   dsply                   TestNum           
>           
>                                                               
>           
> C                   eval      *InLR = *on                     
>           
> C                   return                                    
>           
>                                                               
>           
> PStrtonum         B                                           
>           
> DStrtonum         PI            10  0                         
>           
> D Str                           10A   Value                   
>           
>                                                               
>           
>                                                               
> D                 DS                                          
> D FLDA                          10A                           
> D  FLD#                         10  0 Overlay(FLDA:1)         
>                                                               
> C                   dow       %subst(Str:%len(Str):1) = ' '   
> C                   eval      Str = (' ' + Str)               
> C                   enddo                                     
>                                                               
> C                   move(p)   Str           FLDA              
>                                                               
> C                   return    FLD#                            
>                                                               
> P                 E                                           
> 
> --
> L. S. Russell Programmer/Analyst
> Datrek Professional Bags, Inc.
> 2413 Industrial Drive
> Springfield, TN. 37172
> mailto:leslier@datrek.com
> http://www.datrek.com
> --
> +---
> | This is the RPG/400 Mailing List!
> | To submit a new message, send your mail to RPG400-L@midrange.com.
> | To subscribe to this list send email to RPG400-L-SUB@midrange.com.
> | To unsubscribe from this list send email to 
> RPG400-L-UNSUB@midrange.com.
> | Questions should be directed to the list owner/operator: 
> david@midrange.com
> +---
> 
+---
| This is the RPG/400 Mailing List!
| To submit a new message, send your mail to RPG400-L@midrange.com.
| To subscribe to this list send email to RPG400-L-SUB@midrange.com.
| To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---


As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.