You need to review your COBOL syntax. The use of a V in a PICTURE clause provides an

IMPLIED decimal point. COBOL will align data to the decimal point, and digits after the implied decimal point are decimals not integers -- but you will never see a decimal piont in a PICTURE clause with a V (unless, of course, someone messed up the logic and / or data). The value 03445 in my post indicates, since the PICTURE IS 9(03)V99 that the actual value is 034.45 and COBOL will treat it as such.

One point to be aware of is that COBOL considers alphanumeric values (PICTURE X) to have a decimal point immediately to the RIGHT of the last character; hence, directly moving any data with decimal digits into an alphanumeric variable causes those decimal digits to be lost. If you want your AVERAGE-GPA variable to be displayed with leading blanks and a decimal point (common requirements), add this to your WORKING-STORAGE:

01 OUTPUT-AVG PIC ZZ9.99.

01 OUTPUT-AVG-X REDEFINES OUTPUT-AVG

PIC X(06).

and add to your PROCEDURE DIVSIION statements after you compute AVERAGE-GPA:

MOVE AVERAGE-GPA TO OUTPUT-AVG.

You can then use OUTPUT-AVG-X in your print line, or wherever you need the value with a decimal point.