The DE editing character in COBOL represents a decimal point in European numeric formatting, where comma is used as the decimal separator instead of the period used in US formatting.
12345678*> DE represents European decimal point (comma) 01 WS-EUROPEAN-AMOUNT PIC 9(5)DE99. 01 WS-US-AMOUNT PIC 9(5).99. *> When WS-EUROPEAN-AMOUNT contains 12345.67: *> Display shows: 12345,67 (European format) *> When WS-US-AMOUNT contains 12345.67: *> Display shows: 12345.67 (US format)
1234567891011121314151617181920212223242526272829303132333435363738WORKING-STORAGE SECTION. 01 WS-NUMERIC-VALUES. 05 WS-AMOUNT-1 PIC 9(6)V99 VALUE 123456.78. 05 WS-AMOUNT-2 PIC 9(4)V99 VALUE 1234.50. 05 WS-AMOUNT-3 PIC 9(3)V99 VALUE 123.45. 01 WS-EUROPEAN-DISPLAYS. 05 WS-EURO-AMT-1 PIC ZZ9.ZZ9DE99. 05 WS-EURO-AMT-2 PIC Z.ZZ9DE99. 05 WS-EURO-AMT-3 PIC ZZ9DE99. 01 WS-US-DISPLAYS. 05 WS-US-AMT-1 PIC ZZ9,ZZ9.99. 05 WS-US-AMT-2 PIC Z,ZZ9.99. 05 WS-US-AMT-3 PIC ZZ9.99. PROCEDURE DIVISION. DEMONSTRATE-DE-FORMATTING. *> Move values to European format fields MOVE WS-AMOUNT-1 TO WS-EURO-AMT-1 MOVE WS-AMOUNT-2 TO WS-EURO-AMT-2 MOVE WS-AMOUNT-3 TO WS-EURO-AMT-3 *> Move values to US format fields MOVE WS-AMOUNT-1 TO WS-US-AMT-1 MOVE WS-AMOUNT-2 TO WS-US-AMT-2 MOVE WS-AMOUNT-3 TO WS-US-AMT-3 DISPLAY "European Format (DE):" DISPLAY "Amount 1: " WS-EURO-AMT-1 *> 123.456,78 DISPLAY "Amount 2: " WS-EURO-AMT-2 *> 1.234,50 DISPLAY "Amount 3: " WS-EURO-AMT-3 *> 123,45 DISPLAY " " DISPLAY "US Format:" DISPLAY "Amount 1: " WS-US-AMT-1 *> 123,456.78 DISPLAY "Amount 2: " WS-US-AMT-2 *> 1,234.50 DISPLAY "Amount 3: " WS-US-AMT-3 *> 123.45.
1234567891011121314151617181920212223242526272829303132333435363738WORKING-STORAGE SECTION. 01 WS-MONETARY-VALUES. 05 WS-EURO-AMOUNT PIC 9(6)V99 VALUE 12345.67. 05 WS-POUND-AMOUNT PIC 9(5)V99 VALUE 9876.54. 05 WS-FRANC-AMOUNT PIC 9(4)V99 VALUE 5432.10. 01 WS-EUROPEAN-CURRENCY. 05 WS-EURO-DISPLAY PIC €ZZ9.ZZ9DE99. 05 WS-POUND-DISPLAY PIC £Z9.ZZ9DE99. 05 WS-FRANC-DISPLAY PIC ZZ9.ZZ9DE99₣. 01 WS-ALTERNATIVE-FORMATS. 05 WS-EURO-ALT PIC ZZZDEZZ9DE99 €. 05 WS-LEADING-EURO PIC € Z.ZZ9DE99. 05 WS-TRAILING-EURO PIC Z.ZZ9DE99 EUR. PROCEDURE DIVISION. DISPLAY-EUROPEAN-CURRENCY. *> Move amounts to display fields MOVE WS-EURO-AMOUNT TO WS-EURO-DISPLAY MOVE WS-POUND-AMOUNT TO WS-POUND-DISPLAY MOVE WS-FRANC-AMOUNT TO WS-FRANC-DISPLAY *> Alternative formats MOVE WS-EURO-AMOUNT TO WS-EURO-ALT MOVE WS-EURO-AMOUNT TO WS-LEADING-EURO MOVE WS-EURO-AMOUNT TO WS-TRAILING-EURO DISPLAY "European Currency Formats:" DISPLAY "Euro: " WS-EURO-DISPLAY *> €12.345,67 DISPLAY "Pound: " WS-POUND-DISPLAY *> £9.876,54 DISPLAY "Franc: " WS-FRANC-DISPLAY *> 5.432,10₣ DISPLAY " " DISPLAY "Alternative Euro Formats:" DISPLAY "Format 1: " WS-EURO-ALT *> 12,345,67 € DISPLAY "Format 2: " WS-LEADING-EURO *> € 12.345,67 DISPLAY "Format 3: " WS-TRAILING-EURO. *> 12.345,67 EUR
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455WORKING-STORAGE SECTION. 01 WS-SALES-DATA. 05 WS-PRODUCT-NAME PIC X(20). 05 WS-UNIT-PRICE PIC 9(4)V99. 05 WS-QUANTITY PIC 9(4). 05 WS-TOTAL-AMOUNT PIC 9(7)V99. 01 WS-REPORT-LINES. 05 WS-HEADER-LINE PIC X(60) VALUE "Product Price Qty Total". 05 WS-SEPARATOR PIC X(60) VALUE ALL "-". 01 WS-DETAIL-LINE. 05 WS-PROD-NAME-OUT PIC X(20). 05 FILLER PIC X VALUE SPACE. 05 WS-PRICE-OUT PIC ZZ9DE99. 05 FILLER PIC XX VALUE SPACES. 05 WS-QTY-OUT PIC Z.ZZ9. 05 FILLER PIC XX VALUE SPACES. 05 WS-TOTAL-OUT PIC ZZ.ZZ9DE99. PROCEDURE DIVISION. GENERATE-EUROPEAN-REPORT. DISPLAY WS-HEADER-LINE DISPLAY WS-SEPARATOR *> Sample data MOVE "Widget A" TO WS-PRODUCT-NAME MOVE 125.50 TO WS-UNIT-PRICE MOVE 100 TO WS-QUANTITY COMPUTE WS-TOTAL-AMOUNT = WS-UNIT-PRICE * WS-QUANTITY PERFORM FORMAT-DETAIL-LINE DISPLAY WS-DETAIL-LINE *> More sample data MOVE "Gadget B" TO WS-PRODUCT-NAME MOVE 75.25 TO WS-UNIT-PRICE MOVE 250 TO WS-QUANTITY COMPUTE WS-TOTAL-AMOUNT = WS-UNIT-PRICE * WS-QUANTITY PERFORM FORMAT-DETAIL-LINE DISPLAY WS-DETAIL-LINE. FORMAT-DETAIL-LINE. MOVE WS-PRODUCT-NAME TO WS-PROD-NAME-OUT MOVE WS-UNIT-PRICE TO WS-PRICE-OUT MOVE WS-QUANTITY TO WS-QTY-OUT MOVE WS-TOTAL-AMOUNT TO WS-TOTAL-OUT. *> Output would show: *> Product Price Qty Total *> ---------------------------------------------------- *> Widget A 125,50 100 12.550,00 *> Gadget B 75,25 250 18.812,50
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061WORKING-STORAGE SECTION. 01 WS-FINANCIAL-DATA. 05 WS-PRINCIPAL PIC 9(8)V99 VALUE 100000.00. 05 WS-INTEREST-RATE PIC 9V9999 VALUE 0.0525. 05 WS-YEARS PIC 9(2) VALUE 10. 05 WS-MONTHLY-PAYMENT PIC 9(6)V99. 05 WS-TOTAL-INTEREST PIC 9(8)V99. 05 WS-TOTAL-PAYMENTS PIC 9(8)V99. 01 WS-DISPLAY-AMOUNTS. 05 WS-PRINCIPAL-DISP PIC €ZZZ.ZZ9DE99. 05 WS-RATE-DISP PIC Z9DE9999%. 05 WS-PAYMENT-DISP PIC €Z.ZZ9DE99. 05 WS-INTEREST-DISP PIC €ZZZ.ZZ9DE99. 05 WS-TOTAL-DISP PIC €ZZZ.ZZ9DE99. 01 WS-WORK-FIELDS. 05 WS-MONTHLY-RATE PIC 9V999999. 05 WS-NUM-PAYMENTS PIC 9(3). 05 WS-TEMP-CALC COMP-2. PROCEDURE DIVISION. CALCULATE-LOAN-DETAILS. *> Calculate monthly payment using standard formula COMPUTE WS-MONTHLY-RATE = WS-INTEREST-RATE / 12 COMPUTE WS-NUM-PAYMENTS = WS-YEARS * 12 *> Monthly payment calculation COMPUTE WS-TEMP-CALC = (1 + WS-MONTHLY-RATE) ** WS-NUM-PAYMENTS COMPUTE WS-MONTHLY-PAYMENT = WS-PRINCIPAL * (WS-MONTHLY-RATE * WS-TEMP-CALC) / (WS-TEMP-CALC - 1) *> Calculate totals COMPUTE WS-TOTAL-PAYMENTS = WS-MONTHLY-PAYMENT * WS-NUM-PAYMENTS COMPUTE WS-TOTAL-INTEREST = WS-TOTAL-PAYMENTS - WS-PRINCIPAL *> Format for European display MOVE WS-PRINCIPAL TO WS-PRINCIPAL-DISP MOVE WS-INTEREST-RATE TO WS-RATE-DISP MOVE WS-MONTHLY-PAYMENT TO WS-PAYMENT-DISP MOVE WS-TOTAL-INTEREST TO WS-INTEREST-DISP MOVE WS-TOTAL-PAYMENTS TO WS-TOTAL-DISP DISPLAY "European Loan Calculation:" DISPLAY "==========================" DISPLAY "Principal Amount: " WS-PRINCIPAL-DISP DISPLAY "Interest Rate: " WS-RATE-DISP DISPLAY "Loan Term: " WS-YEARS " years" DISPLAY "Monthly Payment: " WS-PAYMENT-DISP DISPLAY "Total Interest: " WS-INTEREST-DISP DISPLAY "Total Payments: " WS-TOTAL-DISP. *> Sample output: *> Principal Amount: €100.000,00 *> Interest Rate: 5,2500% *> Monthly Payment: €1.076,65 *> Total Interest: €29.198,44 *> Total Payments: €129.198,44
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667WORKING-STORAGE SECTION. 01 WS-INPUT-AMOUNT PIC 9(7)V99 VALUE 1234567.89. 01 WS-US-FORMAT PIC Z,ZZZ,ZZ9.99. 01 WS-EUROPEAN-FORMAT PIC Z.ZZZ.ZZ9DE99. 01 WS-STRING-WORK PIC X(15). 01 WS-CONVERTED-STRING PIC X(15). 01 WS-CHAR-COUNTER PIC 9(2). PROCEDURE DIVISION. CONVERT-FORMATS. *> Convert to US format MOVE WS-INPUT-AMOUNT TO WS-US-FORMAT DISPLAY "US Format: " WS-US-FORMAT *> Convert to European format MOVE WS-INPUT-AMOUNT TO WS-EUROPEAN-FORMAT DISPLAY "European Format: " WS-EUROPEAN-FORMAT *> Demonstrate string conversion PERFORM CONVERT-US-TO-EUROPEAN PERFORM CONVERT-EUROPEAN-TO-US. CONVERT-US-TO-EUROPEAN. *> Convert US format string to European format MOVE WS-US-FORMAT TO WS-STRING-WORK MOVE SPACES TO WS-CONVERTED-STRING *> Replace commas with periods and periods with commas PERFORM VARYING WS-CHAR-COUNTER FROM 1 BY 1 UNTIL WS-CHAR-COUNTER > LENGTH OF WS-STRING-WORK EVALUATE WS-STRING-WORK(WS-CHAR-COUNTER:1) WHEN ',' MOVE '.' TO WS-CONVERTED-STRING(WS-CHAR-COUNTER:1) WHEN '.' MOVE ',' TO WS-CONVERTED-STRING(WS-CHAR-COUNTER:1) WHEN OTHER MOVE WS-STRING-WORK(WS-CHAR-COUNTER:1) TO WS-CONVERTED-STRING(WS-CHAR-COUNTER:1) END-EVALUATE END-PERFORM DISPLAY "US to European: " WS-STRING-WORK " -> " WS-CONVERTED-STRING. CONVERT-EUROPEAN-TO-US. *> Convert European format string to US format MOVE WS-EUROPEAN-FORMAT TO WS-STRING-WORK MOVE SPACES TO WS-CONVERTED-STRING *> Replace periods with commas and commas with periods PERFORM VARYING WS-CHAR-COUNTER FROM 1 BY 1 UNTIL WS-CHAR-COUNTER > LENGTH OF WS-STRING-WORK EVALUATE WS-STRING-WORK(WS-CHAR-COUNTER:1) WHEN '.' MOVE ',' TO WS-CONVERTED-STRING(WS-CHAR-COUNTER:1) WHEN ',' MOVE '.' TO WS-CONVERTED-STRING(WS-CHAR-COUNTER:1) WHEN OTHER MOVE WS-STRING-WORK(WS-CHAR-COUNTER:1) TO WS-CONVERTED-STRING(WS-CHAR-COUNTER:1) END-EVALUATE END-PERFORM DISPLAY "European to US: " WS-STRING-WORK " -> " WS-CONVERTED-STRING.
12345678910111213141516171819202122232425262728293031323334353637WORKING-STORAGE SECTION. 01 WS-LOCALE-SETTING PIC X(2) VALUE "US". 88 US-LOCALE VALUE "US". 88 EUROPEAN-LOCALE VALUE "EU". 88 UK-LOCALE VALUE "UK". 01 WS-AMOUNT PIC 9(6)V99 VALUE 12345.67. 01 WS-FORMATTED-DISPLAYS. 05 WS-US-DISPLAY PIC $ZZ,ZZ9.99. 05 WS-EURO-DISPLAY PIC €ZZ.ZZ9DE99. 05 WS-POUND-DISPLAY PIC £ZZ,ZZ9.99. PROCEDURE DIVISION. LOCALE-AWARE-FORMATTING. *> Get locale setting from environment or configuration ACCEPT WS-LOCALE-SETTING FROM ENVIRONMENT "LOCALE" *> Format amount based on locale EVALUATE TRUE WHEN US-LOCALE MOVE WS-AMOUNT TO WS-US-DISPLAY DISPLAY "Amount (US): " WS-US-DISPLAY WHEN EUROPEAN-LOCALE MOVE WS-AMOUNT TO WS-EURO-DISPLAY DISPLAY "Amount (EU): " WS-EURO-DISPLAY WHEN UK-LOCALE MOVE WS-AMOUNT TO WS-POUND-DISPLAY DISPLAY "Amount (UK): " WS-POUND-DISPLAY WHEN OTHER DISPLAY "Unknown locale: " WS-LOCALE-SETTING MOVE WS-AMOUNT TO WS-US-DISPLAY DISPLAY "Amount (Default): " WS-US-DISPLAY END-EVALUATE.
DE represents a comma (,) as the decimal separator in European format, while period (.) represents a period as the decimal separator in US format. DE is used for international applications requiring European number formatting.
Yes, DE can be combined with currency symbols like €, £, or other currency indicators. The currency symbol can be placed before or after the number depending on local conventions.
In European format with DE, periods (.) are typically used as thousands separators, while commas (represented by DE) serve as decimal separators. Use period (.) in the PICTURE clause for thousands separation when using DE for decimals.
DE support varies by compiler and may be part of international or European language extensions. Check your compiler documentation for DE support and any required compiler options or settings.