Странно работающий float в С++

Я Python-программист, только начинаю осваивать С++. Решил написать функцию для вычисления процента из данных - сколько всего, и сколько из. Мой код был фактически переведён с кода на Python, в код на С++. В то время, как код на Python работает как положено, вот он:

def percent(frst, scnd):
    coef = 100 / frst
    res = scnd * coef
    return res

При входных данных в виде 6400, 234, выдаётся результат:

3.65625

А вот его "порт" на C++:

float Percent (int first, int second) {
    float coefficient = 100 / first;
    float result = second * coefficient;
    return result;
}

При тех же самых входных данных, почему-то, результатом является:

0.000000%

Компилятор - g++ (GCC) 10.2.1 20201203.


Ответы (1 шт):

Автор решения: nomnoms12

Измените сигнатуру функции:

float Percent(float first, float second);

Ошибка происходит потому, что сначала Вы делите целое на целое, а уже затем преобразуете результат, т.е. ноль, в тип с плавающей запятой. Происходит это в строке 2:

float coefficient = 100 / first;  // 100 / 6400 = 0

P.S.:

Стоит сказать, что код на C++ не является аналогом кода на Python. Python в большинстве случаев использует для представления чисел с плавающей запятой тип double:

Almost all platforms map Python floats to IEEE-754 “double precision”. 754 doubles contain 53 bits of precision

Поэтому более точным аналогом была бы следующая функция:

double Percent(double first, double second)
{
    double coefficient = 100 / first;
    double result = second * coefficient;
    return result;
}
→ Ссылка