在项目中,经常会遇到,比较double和float数值是否相等?
正常情况下,我们会直接判断两个变量是否相等,比如“A==B”
但是当A和B中是double和float数值时候,该方式不可取;
比如:以下代码提供一个接口bisSameVal,比较double和float两个数值是否相等;
当我们定义个double和float数值并且赋值233.23时,bisSameVal结果返回的是false;
#include "stdafx.h"
#include <stdio.h>
bool bisSameVal( double A ,float B )
{
if(A == B)
{
return true;
}
else
{
return false;
}
}
void main()
{
double a = 233.23;
float b = 233.23;
printf("Result:%d\n",bisSameVal(a, b));
return;
}
根据经验,为什么a和b两个数值不同,同样赋值的都是233.23;
但程序运行时,我们通过监视器,可以看到a和b的值,并不相等;
那如何判断double和float数值是否是我们想要的数值呢;
比如当前我们对a和b赋值是233.23;期望的结果是a和b相等;有没有一种方式,可以得到我们期望的结果呢?
答案是肯定的;这种方式就是保留精度;
比如我们保留小数点后五位;窒息
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
bool bisSameVal( double A ,double B )
{
// if(A == B)
// {
// return true;
// }
// else
// {
// return false;
// }
if (abs(A - B) < 0.00001 )
{
return true;
}
else
{
return false;
}
}
void main()
{
double a = 233.23;
float b = 233.23;
printf("Result:%d\n",bisSameVal(a, b));
return;
}
执行结果:
我们看到,结果是A和B两个数值是相同的;