/* 我目前正在学习 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;
}
输入:
a = 2 b = 1 c = 0.2
输出:
4
所需输出:
5
我需要在起始 a 和结束 b 之间找到 res(增量 c 的步数),并截断为最接近的下限整数值。
我尝试将 (a-b) 定义为另一个 int,结果仍然是 4 而不是 5。
但只是测试
int main()
{
cout<<(2-1)/0.2;
}
正确给出了5。
还有一个疑问:如果我没有像上面那样定义任何变量,系统将采用什么数据类型来表示结果?
这几乎肯定是一个舍入错误。自己测试一下 ->
a = 2
b = 1
c = 0.2000000001
res = 4
我建议使用双精度而不是浮点数,它应该为您提供所需的精度。当然,从双精度数到整数总是存在舍入错误的风险,而不使用某种舍入函数来补偿