尝试划分时出现错误的结果

Wrong result while trying to divide

本文关键字:错误 结果 划分 分时      更新时间:2023-10-16

为了学习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;
}

我已经挣扎了一段时间,我需要有人来解释我做错了什么。提前致谢

整数逻辑中1/2 = 0

1/2.0f = 0.5f浮点逻辑。

这条线float(gameWin / gameNumber)表示在integer空间中除法,然后将结果转换为float空间。

您应该这样做:

float(gameWin) / gameNumber

甚至更好:

static_cast<float>(gameWin)/ gameNumber

当你这样做float(gameWin / gameNumber)除法仍然是整数除法。您需要将其中一个操作数转换为浮点数,例如 float(gameWin) / gameNumber .

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