двойной тип переменной всегда равен 0

0

Для задания я должен создать игру "Скакалка для ножниц с ножницами", где я должен вывести процент выигрышей в конце. В программе я подсчитываю количество игр, в которые играют игроки A и B, включая галстучные игры, общие игры и процент выигрыша каждого игрока. Все переменные являются int за исключением процента, который является double типом переменной. Когда я вычисляю процент (выигранные игры/итоговые игры), я получаю 0 в результате. Любые идеи почему? Извините, я не мог предоставить какой-либо код, это задание, и мне не разрешено публиковать его в любом месте в Интернете.

Теги:
double

2 ответа

6

Без просмотра кода я не могу быть на 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. Это должно решить вашу проблему.

Надеюсь это поможет!

  • 0
    +1 Определенно правдоподобно.
  • 0
    +1. краткое примечание о приведении: (double) для C или static_cast <double> для C ++ в вашем случае
Показать ещё 1 комментарий
2

В большинстве языков программирования разделение между двумя целыми числами является целым числом. Таким образом, 5/10 даст 0, как и 1/10 и 9/10. Это происходит до назначения переменной результата, поэтому факт, что переменная result является double имеет значения. Вам нужно превратить либо делитель, либо дивиденд в двойной для вычисления с плавающей запятой.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню