/*我目前正在学习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.
还有一个疑问,如果我没有像上面那样定义任何变量,那么系统会为结果假设什么数据类型.
你有一个古老的圆形浮点问题,这个问题源于浮点数是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.
| 归档时间: |
|
| 查看次数: |
2009 次 |
| 最近记录: |