У меня возникают проблемы с выходом этой программы. Он имитирует пьяного матроса на доске, который случайным образом идет на один шаг влево или вправо. В конце симуляции программа выводит процент от того, как он упал с доски, а не падает. Мой процент всегда равен нулю, и я не могу понять, что не так с моим кодом.
Эта функция правильно выводит переменную "эксперименты" и "fallCount", но всегда показывает "fallCount/experimental" как ноль.
Это должно гласить: "После 2 экспериментов матрос упал 1 раз, процент падения составил 0,5%" (если эксперименты = 2 и fallCount = 1), то его 0% каждый раз.
Позвольте мне знать, что я делаю неправильно. Спасибо!
void outputExperimentStats(int experiments, int fallCount)
{
cout << "After " << experiments << " experiments, sailor fell "
<< fallCount << " time, fall percentage was " << fallCount / experiments << "%\n";
}
Это потому, что вы используете целочисленное деление. Нет десятичных знаков, поэтому вещи усекаются. Например
1 / 2 --> 0 // integer division
Это правильное и ожидаемое поведение.
Чтобы получить нужное поведение, используйте double
или float
.
1.0 / 2.0 --> 0.5 // double division
В вашем примере вы можете либо изменить типы своих входов double
либо если вы хотите сохранить их int
, вы можете конвертировать их во время разделения
static_cast<double>(fallCount) / static_cast<double>(experiments)