Я пишу программу, в которой пользователь вводит имена участников и покупает билеты как билеты на соревнования. Я пытаюсь вычислить процентный шанс для каждого участника на победу, но по какой-то причине он возвращает ноль, вот код
for(int i = 0; i < ticPurch.size(); i++){
totalTics = ticPurch[i] + totalTics; //Figuring out total amount of ticket bought
}
cout << totalTics;
for (int i = 0; i < names.size(); i++){
cout << "Contenstant " << " Chance of winning " << endl;
cout << names[i] << " " << ((ticPurch.at(i))/(totalTics)) * 100 << " % " << endl; //Figuring out the total chance of winning
}
ticPurch is a vector of the the tickets each contestant bought and names is a vector for the contestants name. For some reason the percent is always returning zero and I don't know why
return 0;
Что такое ticPurch? Что такое totalTics? Если вы пытаетесь разделить целые числа, вы получите целое число. 3/4 дает 0. Используйте double, если это так.





Деление целого числа на целое дает вам целое число путем усечения дробной части.
Поскольку ваши значения меньше единицы, ваш результат всегда будет равен нулю.
Вы можете привести операнд к типу с плавающей запятой, чтобы получить желаемое вычисление:
(ticPurch.at(i) / (double)totalTics) * 100
Затем, вероятно, округлите этот результат, поскольку вам, кажется, нужны результаты целых чисел:
std::floor((ticPurch.at(i) / (double)totalTics) * 100)
Мой предпочтительный подход, который полностью избегает плавающей запятой (всегда приятно!), - это умножить на разрешение вашего вычисления первый:
(ticPurch.at(i) * 100) / totalTics
Это всегда будет округлять вниз, поэтому имейте это в виду, если вы решили использовать, скажем, std::round (или std::ceil) вместо std::floor в приведенном выше примере. При необходимости арифметические уловки могут имитировать их.
Теперь вместо, например, (3/5) * 100 (то есть 0*100 (то есть 0)), например, у вас есть (3*100)/5 (который представляет собой 300/5 (который является 60)).
Меня всегда учили использовать здесь static_cast. Есть ли причина предпочесть актерский состав в стиле C.
@ scohe001 Не совсем, я просто ленился. Честно говоря, в случае с int-> double это не имеет значения.
Мех достаточно честно
какой тип
totalTics? А что типаticPurch.at(i)? Подсказка: если они обаint, результатом этого деления также будетint.