Problem:
Release: 3.1 Inserted 3999.999999 from sqlplus into number(15,6) came out 4000, in program came out 3999.999999
which is correct results.
Resolution:
SQLPLUS has setting numwidth whose default is 10 , it will round to display 10 digits.
This is why sqlplus showed different results than program.
If set numwidth to 15, then sqlplus shows same results as program, which is the value stored in the database.