Это из-за целочисленного деления.
Значение для отсутствия 4, неделя равно 2, а период - 2. процентов возвращает 11.111111.
Это потому, что 37/2 составляет 18,5, а дробная часть выбрасывается из-за целочисленного деления. Это дает 18, что умножается на 2 равно 36. Затем мы делим 4 на 36, что равно 0.111 ... То, что умножено на 100, равно 11.111 ....
Но если я делаю то же самое в Excel с формулой 4/(2 * (37/2)) * 100, он возвращает 10.81.
Это потому, что Excel не использует целочисленное деление. 37/2 составляет 18,5, 18,5 * 2 составляет 37. 4/37 - 0,108108108 ... Таким образом, умножение на 100 дает приблизительно 10,81.
Объяснение
Причина это делает целочисленное деление происходит потому, что у вас есть целое число period
. Java видит, что существует два целых числа и разделяются, поэтому он использует целочисленное деление. Это приводит к удалению всех дробных частей, что означает, что 0,5 из 18,5 в результате 37/2 удаляется, что делает результаты разными.
Fix
Вы можете «исправить» это, сделав по крайней мере один из операндов в поплавок деления или двойной:
double percent = absence/(week*((double) 37/period))*100;
Что это будет сделать, это достичь деление с плавающей точкой дает 10.8108 ...
Потому что целое деление. – Li357
добавить объявление своих переменных, но, скорее всего, они являются ints – Turo
@AndrewL Да, одна из переменных (период) была целочисленной, поскольку они содержат только 1 или 2. Упомяните, почему это работает таким образом в кодировании, когда остальные Двойной? – janlindso