错误的C++分区结果

Vai*_*han 1 c++

/*我目前正在学习c ++作为我核心科目的一部分*/

奇怪的是,在编写另一个长程序时,我遇到了这个实例

#include <iostream>
#include <cmath>
using namespace std;  
int main()
  {
    int a,b,res; float c;
    cin>>a;
    cin>>b;
    cin>>c;
    res=(a-b)/c;
    cout<<res;
  }
Run Code Online (Sandbox Code Playgroud)

输入:

a = 2 b = 1 c = 0.2

输出:

4

期望的输出:

我需要在起始a和结束b之间找到res,(增量c的步数)截断到整数值之前的下一个.

我尝试将(ab)定义为另一个int,仍然是相同的结果4而不是5.

但只是测试

int main()
{
    cout<<(2-1)/0.2;
}
Run Code Online (Sandbox Code Playgroud)

正确给了5.

还有一个疑问,如果我没有像上面那样定义任何变量,那么系统会为结果假设什么数据类型.

Fan*_*Fox 9

你有一个古老的圆形浮点问题,这个问题源于浮点数是2的基数,因此不能完全代表所有10个基数(例如0.3).阅读本教程和此SO问题以获取更多信息.

至于您的示例,请尝试将其添加到您的程序:

cout << std::setprecision(16) << (float)(a-b)/c << endl;
Run Code Online (Sandbox Code Playgroud)

你会得到这个打印出来:

4.999999925494195
Run Code Online (Sandbox Code Playgroud)

什么是(int)4.9999...?是的4.

实例.

  • @Peter 从表达式`(int)4.999...` 中这还不够清楚吗? (2认同)