Проблемы с поиском проблемы в цикле for

Я пишу программу, в которой пользователь вводит имена участников и покупает билеты как билеты на соревнования. Я пытаюсь вычислить процентный шанс для каждого участника на победу, но по какой-то причине он возвращает ноль, вот код

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;

какой тип totalTics? А что типа ticPurch.at(i)? Подсказка: если они оба int, результатом этого деления также будет int.

scohe001 29.10.2018 17:02

Что такое ticPurch? Что такое totalTics? Если вы пытаетесь разделить целые числа, вы получите целое число. 3/4 дает 0. Используйте double, если это так.

Ayxan Haqverdili 29.10.2018 17:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Деление целого числа на целое дает вам целое число путем усечения дробной части.

Поскольку ваши значения меньше единицы, ваш результат всегда будет равен нулю.

Вы можете привести операнд к типу с плавающей запятой, чтобы получить желаемое вычисление:

(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 29.10.2018 17:06

@ scohe001 Не совсем, я просто ленился. Честно говоря, в случае с int-> double это не имеет значения.

Lightness Races in Orbit 29.10.2018 17:07

Мех достаточно честно

scohe001 29.10.2018 17:27

Другие вопросы по теме