Или просто сделайте это (другим операндам не понадобится приведение к float
, так как достаточно, если это только один из операндов, тогда остальные будут преобразованы в него неявно)
double grade(int lc, int wc, int sc)
{
float L = round(((float)wc/100)/lc);
float S = round(((float)wc/100)/sc);
float index = 0.0588 * L - 0.296 * S - 15.8;
return index;
}
Обратите внимание, что тип возвращаемого значения double
, но вы используете только float
с. Используйте double
вместо float
s в функции в качестве типов ИЛИ измените тип возвращаемого значения на float
.
Ошибка состоит в том, что этот wc = (float)wc;
по сути такой wc = (int)(float)wc;
, поскольку wc
тип int
. По сути, ничего не происходит, поэтому, когда вы выполняете вычисления как wc/100
, тогда это будет целочисленное деление, результатом которого будет целое число, поэтому, если wc
меньше 100 (и> = 0), то результат равен 0, а не действительное число, как и следовало ожидать.