#include<iostream>
using namespace std;
int main()
{
float test1= 21.195;
double test2 = 21.195;
cout <<fixed<<setprecision(2)<<test1<< endl; //21.19
cout << fixed<<setprecision(2)<<test2; //21.20
return 0;
}
之前发现了一个有意思的问题,上面这段代码输出的两个值是不一样的,test1输出时的值是21.19,而test2输出的值是21.20。
调试时发现
搜索后发现之所以test1和test2会以这样的形式储存是因为C/C++中除了可以表示为2的幂次以及整数数乘的浮点数,其他浮点数是只能用近似数表示的。
这也是为什么C/C++中浮点数是不能用==和!=直接比较是否相等的。当我们需要比较两个浮点数是否相等时,我们可以看两者之差是否是一个很小的数。
比如
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
float test1= 21.195;
double test2 = 21.195;
if (fabs(test1 - test2) <= 1e-6)
cout << "yes!!";
return 0;
}