试图划分时错误的结果

时间:2016-01-20 08:02:39

标签: c++ c++11 visual-c++

要学习C ++,我会关注一个在线课程,并且我正在尝试创建一个控制台模式游戏。 游戏采用随机单词,分割单词并要求用户猜出单词。

当用户不想再玩并退出游戏时,我的程序会显示一些统计数据(游戏总数,游戏胜利......)。 虽然我试图获得胜率,但我得错了结果。

解释(我想要什么):
我的用户赢了1场比赛并输了1场比赛 - > 1/2 * 100 = 50%(胜率)

出了什么问题(我得到了什么):
我的函数返回0表示1/2 * 100。

void gameStatistics(int gameNumber, int gameWin, int defeats, int tries)
{
    std::cout << "You quit." << std::endl;
    float const winpercentage=float(gameWin / gameNumber) * 100; // C4244, resolved by casting the int into float.
    std::cout << "Win average: " << winpercentage << std::endl;
    std::cout << "Statistics: Number of games played: " << gameNumber << " Number of win: " << gameWin << " Number of defeat: " << defeats << " Number of tries: " << tries << std::endl;
}

我一直在苦苦挣扎,我需要有人来解释我做错了什么。 提前致谢

2 个答案:

答案 0 :(得分:3)

整数逻辑中的

1/2 = 0

浮动逻辑中的

1/2.0f = 0.5f

此行float(gameWin / gameNumber)表示在integer空格中划分,然后将结果转换为float空格。

你应该这样做:

float(gameWin) / gameNumber

甚至更好:

static_cast<float>(gameWin)/ gameNumber

答案 1 :(得分:3)

当您执行float(gameWin / gameNumber)时,除法仍然是整数除法。您需要将一个操作数转换为浮点数,例如float(gameWin) / gameNumber

另请注意,除非您使用的是小型嵌入式平台,或者编写代码才能在GPU上运行,否则这些天真的没有理由使用float。使用double和使用float一样“快”,double也是默认的浮点类型(例如使用浮点文字时)。