尝试划分时出现错误的结果
Wrong result while trying to divide
为了学习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
也是默认的浮点类型(例如,使用浮点文字时)。
相关文章:
- 如何修复循环中的错误产生的错误结果?
- 添加可变参数函数的错误结果
- 使用特征 3 线性系统求解器的错误结果
- 按位包含 OR 的错误结果
- 如果我将索引变量更改为零,并且合并函数中的k = 0,则获得合并排序的错误结果
- STD :: FPCLASSIFY的错误结果使用Valgrind进行长时间的双重双重结果
- 视觉工作室的错误结果
- 将C#struct传递给C 不受管理的DLL返回错误结果
- 最长的常见子字错误结果
- 华氏度到摄氏度的错误结果
- UE4中简单坐标变换的错误结果
- 记忆错误结果的说明[编译器行为]
- 如何解决错误PRJ0002:错误结果 -1073741515从"cl.exe"返回?
- 错误 PRJ0002:错误结果 -1073741515 从"C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\cl.
- glGetUniformLocation OpenGL ES 2.0(在ipad 3 iOS 7.0.3上返回错误结果)
- 在模板函数中调用std::for_each时出现错误结果
- 使用copy和back_inserter将矢量附加到其自身时出现错误结果
- CUDA 线程在全局内存中的私有位置写入时出现错误结果
- 来自 c++ 代码的错误结果
- 使用浮点值和铸造的算术运算的错误结果 - 差异很大,我想这不是准确值的情况(429497)?