× 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.



The problem is the trailing "N", both %INT and %DEC ignore embedded blanks so
the leading blanks are not the issue.

The system has no way to know that you really have a zoned numeric value stored
in a character field. What I would do is overlay that field with a zoned field
and then move use the zoned portion. You should also replace the leading blanks
with zeros to make it work properly.
Something like:

D myDS     DS
D  AmountFld                  15A
D  AmtField                   15S 0  Overlay(AnountFld)

  Eval AmountFld = %XLATE(' ':'0':AmountFld);
  Eval TotField += AmountFld;

Again, it is NOT the blanks, it is because you have an "N" and probably an
occasional "J" in the field that's causing the issue. There are subprocedures in
RPG xTools that will do this for you but, as you can see, it's only a few lines
of code to do it yourself.
What you are trying to do is convert a character field that contains a
relatively "true" numeric representation of the data. But %DEC and %INT convert
numeric values that are stored in character fields as text to numeric. What
you're doing is similar to trying to "unpack" a packed field that is stored in a
character field using %DEC.  You'll never do it. The RPG xTool to do this is
called NumToNum() you give it a buffer and buffer length and then tell it what
format the data is stored in there, Zoned(15,0) in your example, and it returns
the data in numeric form.


-Bob Cozzi
www.RPGxTools.com
RPG xTools - Enjoy programming again.

-----Original Message-----
From: rpg400-l-bounces+cozzi=rpgiv.com@xxxxxxxxxxxx
[mailto:rpg400-l-bounces+cozzi=rpgiv.com@xxxxxxxxxxxx] On Behalf Of Michael
Jacobsen
Sent: Thursday, March 09, 2006 1:53 PM
To: RPG programming on the AS400 / iSeries
Subject: How to convert character field w/ negative numeric data (255N)

This may have been asked before, but I didn't see it in the archives. Here 
is the problem:

Error message: A character representation of a numeric value is in error
Line in error: Eval TotalFld += %Dec(AmountFld:15:2)

Value of AmountFld from DUMP: AmountFld   CHAR(15)    '  000000000255N'

D TotalFld        S             13S 2 Inz(0) 

My question is, how do I add a character field that contains numeric data, 
including negatives as represented above, to a numeric field?  %Int gave 
the same error.  MOVE appeared to work, but I don't want to create a temp 
field if I don't have to.  On V5R2.

Thanks,

Mike

As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

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.