1

私はコンピュータサイエンスの仕事をしています。打率プログラムを作らなければなりません。ヒット、アウト、シングルなどを計算するように動作させていますが、打率を計算する場合は0.000になります。理由はわかりません。グーグルで大量の検索を行ったり、変数をdoubleやfloatにしてみたりしました。コードは、次のとおりです。

#include <iostream>
#include <iomanip>
#include <cstdlib>

using namespace std;

int main(){
const int MAX_TIMES_AT_BAT = 1000;
int hits = 0, timesBatted = 0, outs = 0, walks = 0, singles = 0, doubles = 0, triples = 0, homeRuns = 0;
float battingAverage = 0.0, sluggingPercentage = 0.0;

for(int i = 0; i < MAX_TIMES_AT_BAT; i++){
    int random = rand() % 100 +1;

    if(random > 0 && random <= 35){ 
        outs++;
    }else if(random > 35 && random <= 51){
        walks++;
    }else if(random > 51 && random <= 71){
        singles++;
        hits++;
    }else if(random > 71 && random <= 86){
        doubles++;
        hits++;
    }else if(random > 86 && random <= 95){
        triples++;
        hits++;
    }else if(random > 95 && random <= 100){
        homeRuns++;
        hits++;
    }else{
        cout << "ERROR WITH TESTING RANDOM!!!";
        return(0);
    }
    timesBatted++;
}
    cout << timesBatted << " " << hits << " " << outs << " " << walks << " " << singles << " " << doubles << " " << triples << " " << homeRuns << endl;


battingAverage = (hits / (timesBatted - walks));
sluggingPercentage = (singles + doubles * 2 + triples * 3 + homeRuns*4) / (timesBatted - walks);

cout << fixed << setprecision(3) << "Batting Average: " << battingAverage << "\nSlugging Percentage: " << sluggingPercentage << endl;


return 0;
}

どんな助けでも素晴らしいでしょう!何が問題なのですか?私はそれを計算しました、そして打率は0.5646であり、長打率は1.0937であるはずです。その表示は0.0000、および1.0000です。前もって感謝します!!!

4

2 に答える 2

4

整数除算を実行しています。オペランドの少なくとも1つを明示的にキャストしますdouble。例えば:

battingAverage = (static_cast<float>(hits) / (timesBatted - walks));

への割り当てについても同じですsluggingPercentage

于 2013-03-06T15:39:49.383 に答える
0

intをanで割るのintは別のことintです。1つをにキャストするだけdoubleです。

例えば、

battingAverage = static_cast<double>(hits) / (timesBatted - walks)
sluggingPercentage = static_cast<double>(singles + doubles * 2 + triples * 3 + homeRuns*4) / (timesBatted - walks)

コンパイラは、何か間違ったことをしているときに、より多くのヒントを提供するため、static_cast<double>()Cキャストではなく常にC ++キャスト()を使用してください。(double)()

PS C ++を嫌いではありません!:(少しの愛を示してください、そしてそれはあなたを再び愛します!

于 2013-03-06T15:40:17.017 に答える