***************************************************************** * INTCALC - DAILY INTEREST ACCRUAL * * * * For one account: daily interest on the balance at the given * * annual rate (actual/365), rounded to the penny, then the * * interest accrued over the given number of days. * * * * Fool the Replay challenge program 1. The trap is ROUNDED: * * COBOL rounds a half penny away from zero; a migration that * * rounds half to even drifts by a penny on exact ties only. * ***************************************************************** IDENTIFICATION DIVISION. PROGRAM-ID. INTCALC. * DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-WORK-FIELDS. 05 WS-DAYS-IN-YEAR PIC 9(3) VALUE 365. 05 WS-DAILY-INT PIC S9(7)V99 COMP-3 VALUE ZERO. * LINKAGE SECTION. 01 LK-ACCRUAL. 05 LK-ACCT-ID PIC X(10). 05 LK-BALANCE PIC S9(9)V99 COMP-3. 05 LK-ANNUAL-RATE PIC 9V9(5). 05 LK-DAY-COUNT PIC 9(3). 05 LK-DAILY-INT PIC S9(7)V99 COMP-3. 05 LK-ACCRUED PIC S9(9)V99 COMP-3. * PROCEDURE DIVISION USING LK-ACCRUAL. * 0000-MAIN. COMPUTE WS-DAILY-INT ROUNDED = LK-BALANCE * LK-ANNUAL-RATE / WS-DAYS-IN-YEAR MOVE WS-DAILY-INT TO LK-DAILY-INT COMPUTE LK-ACCRUED = WS-DAILY-INT * LK-DAY-COUNT GOBACK.