Для задания я должен создать игру "Скакалка для ножниц с ножницами", где я должен вывести процент выигрышей в конце. В программе я подсчитываю количество игр, в которые играют игроки A и B, включая галстучные игры, общие игры и процент выигрыша каждого игрока. Все переменные являются int
за исключением процента, который является double
типом переменной. Когда я вычисляю процент (выигранные игры/итоговые игры), я получаю 0 в результате. Любые идеи почему? Извините, я не мог предоставить какой-либо код, это задание, и мне не разрешено публиковать его в любом месте в Интернете.
Без просмотра кода я не могу быть на 100% уверенным, но я предполагаю, что вы делите такие значения следующим образом:
int numWins = /* ... */
int numLosses = /* ... */
double ratio = numWins / numLosses; // <-- Error!
В C и C++ эта последняя строка является логической ошибкой. Хотя вы сохраняете результат как double
, потому что вы делите два int
деление выполняется как целочисленное деление, а затем сохраняется в double
. C и C++ не смотрят на тип переменной, которую вы назначаете, когда решаете, какое деление использовать; отношение двух int
всегда вычисляется с использованием целочисленного деления.
Чтобы исправить это, вы можете добавить бросок:
double ratio = (double)numWins / numLosses;
Это numWins
до double
, что гарантирует, что деление выполняется как деление с плавающей запятой, потому что хотя бы один из операндов является double
. Это должно решить вашу проблему.
Надеюсь это поможет!
В большинстве языков программирования разделение между двумя целыми числами является целым числом. Таким образом, 5/10
даст 0
, как и 1/10
и 9/10
. Это происходит до назначения переменной результата, поэтому факт, что переменная result является double
имеет значения. Вам нужно превратить либо делитель, либо дивиденд в двойной для вычисления с плавающей запятой.