|
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 mailing list archive is Copyright 1997-2025 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 copyright@midrange.com.
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.