偶然在项目中遇到的bug, 查了半天发现是下面这个问题引起的:
#include <iostream>
using namespace std;
int main()
{
double b = 0.1;
double a = 3.5;
int c = a/b;
cout << "a: " << a << endl;
cout << "b: " << b << endl;
cout << "a/b: " << c << endl;
double f = 0.7/0.2;
int h = f/b;
cout << "f: " << f << endl;
cout << "b: " << b << endl;
cout << "f/b: " << h << endl;
printf("a: %.10f\n", a);
printf("f: %.10f\n", f);
if(f == a){
cout << "f == a" << endl;
}
return 0;
}
运行结果如下:
a: 3.5
b: 0.1
a/b: 35
f: 3.5
b: 0.1
f/b: 34
a: 3.5000000000
f: 3.5000000000
为什么3.5/0.1 有时候是35 有时候是 34 呢?
这个有误差啊
有时候是34.9999998
有时候是35.0000001
int h = f/b;相当于对结果进行强制取整 ,使用的是截尾法 ,34.9999998也会变为34
要想一样,你得用四舍五入
int h = f/b+0.5
这样都是35了
不要用float, float误差非常大
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!