Consultor Eletrônico



Kbase 21435: How To Format a Decimal Value As a COBOL Signed Value
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   12/19/2005
Status: Unverified

GOAL:

How to take a decimal value and format it as a signed numeric display value (that is, COBOL format S9(9)v99).

FIX:

/* Please note that this code results in an eleven (11) digit */
/* number which contains leading zeros and is stored as a */
/* character value. */

DEFINE VARIABLE dSomeValue AS DECIMAL NO-UNDO.
DEFINE VARIABLE cFormattedValue AS CHARACTER NO-UNDO.
DEFINE VARIABLE iLastByte AS INTEGER NO-UNDO.
DEFINE VARIABLE bIsPositive AS LOGICAL NO-UNDO.

DEFINE VARIABLE cPositiveByte AS CHARACTER NO-UNDO FORMAT "X(1)"
EXTENT 10 INITIAL ['~300', '~301',
'~302', '~303',
'~304', '~305',
'~306', '~307',
'~310', '~311'].

DEFINE VARIABLE cNegativeByte AS CHARACTER NO-UNDO FORMAT "X(1)"
EXTENT 10 INITIAL ['~320', '~321',
'~322', '~323',
'~324', '~325',
'~326', '~327',
'~330', '~331'].

UPDATE dSomeValue.

ASSIGN bIsPositive = IF (dSomeValue >= 0) THEN TRUE ELSE FALSE
cFormattedValue = STRING(ABS(dSomeValue * 100),"99999999999")
iLastByte = INTEGER(SUBSTRING(cFormattedValue,11,1)) + 1.

IF bIsPositive = TRUE THEN
ASSIGN cFormattedValue = SUBSTRING(cFormattedValue,1,10) +
cPositiveByte[iLastByte].
ELSE
ASSIGN cFormattedValue = SUBSTRING(cFormattedValue,1,10) +
cNegativeByte[iLastByte].

MESSAGE cFormattedValue VIEW-AS ALERT-BOX.