Interesting thing to me is why the compiler even allows it. It should throw
it out as an error because you are comparing an alpha field to a zero (A
numeric field).

Bet it has something to do with the fact that you are using a figurative
constant instead of a zero. The compiler takes it to mean character zero
instead of numeric zero.

I wrote a quick and dirty and confirmed that. I always use 0 or ' ' instead
of figurative constants.

On Fri, May 15, 2009 at 4:24 PM, Douglas Handy <dhandy@xxxxxxxxx> wrote:


Given the value ' .1525', when I compare it to *ZERO using the
instruction If %TrimL(Field) > *ZERO, the compare fails.

As Stephen said, the problem here is you are doing a character comparison,
not a numeric comparison. It is like saying:

If '12345' > '234';

That would also "fail", because the leading character '1' is less than the
leading character '2'. In both EBCDIC and ASCII, the period is a lower
collating sequence than the zero character. Thus '.1525' is "less than"
anything which starts with a '0' character. For the same reason, a field
with '0.1525' is "less than" a field of '00' because the second byte is
lower in the collating sequence.

You really need to compare the numeric value of the character field, not
character contents of the field, even when trimmed.

This is the RPG programming on the IBM i / System i (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives

This thread ...


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

This mailing list archive is Copyright 1997-2019 by 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].