Skip to content

Latest commit

 

History

History
37 lines (30 loc) · 982 Bytes

bug102.md

File metadata and controls

37 lines (30 loc) · 982 Bytes

整数除法问题

找Bug

/**
* 检查投票通过率是否超过2/3。
*/
bool CheckVotePassed(int votes, int total)
{
    const int votePassNumber = 2;
    const int voteTotalNum = 3;
    return votes/total > votePassNumber/voteTotalNum;
}

说明

由于文字“2”和“3”都是整数类型,商也将是整数,因此为零。
就相当于在判断 votes/total > 0

修复此错误的正确方法是将其中一个操作数显式转换为浮点类型,例如:

    return votes/total > tatic_cast<float>(votePassNumber)/voteTotalNum;

或者改变votePassNumber和voteTotalNum的类型。

    const float votePassNumber = 2.0f;
    const float voteTotalNum = 3.0f;


拓展阅读