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