При делении int на int вы получаете int. Когда вы устанавливаете точность своего ответа, вы устанавливаете точность числа, которое уже было усечено.
Например, когда у вас есть:
int a = 5;
int b = 2;
double ans = a / b; //(5/2 = 2)
//ans = 2.0
Вы работаете с целочисленным делением.
a / b
равно 5/2, что дает 2 из-за целочисленного деления не 2.5.
Даже если вы устанавливаете его равным double, вы все равно получаете 2.0, потому что вы устанавливаете ans для результата 5/2, то есть 2. Затем int 2 преобразуется в double: 2.0 , Чтобы получить ответ с правильной десятичной аппроксимацией, сделайте одно из чисел двойным (я бы предложил изменить int p на double p).