用"=="来比较两个浮点数(float或double)是否相等,返回真值完全是不确定的。计算机对浮点数的计算原理是只保证必要精度内正确即可。但是可以用“>”,"<"比较浮点数的大小。
如以下比较fTemp是否等于0.9是不正确的,结果是未知的。
float fTemp=0.9;
if(0.9==fTemp)
{
}
以下是我封装的比较函数
float fTemp=0.9;
float CServerGameDesk::ChangePondPro(float fDegree)
{
float EPSINON = 0.00001;//float的比较精度,如果是double建议精度为0.00000001
float _Adegree=fDegree-0.1 ;//拿比较值和目标值的差值和精度去比较来判断是否相等
float _Bdegree=fDegree-0.2 ;
float _Cdegree=fDegree-0.3 ;
float _Ddegree=fDegree-0.4 ;
float _Edegree=fDegree-0.5 ;
float fTemp=0.9;
if((_Adegree>= - EPSINON) && (_Adegree<= EPSINON))//和精度比较来判断是否相等
{
fTemp=0.9;
}
else if((_Bdegree>= - EPSINON) && (_Bdegree<= EPSINON))
{
fTemp=0.7;
}
else if((_Cdegree>= - EPSINON) && (_Cdegree<= EPSINON))
{
fTemp=0.5;
}
else if((_Ddegree>= - EPSINON) && (_Ddegree<= EPSINON))
{
fTemp=0.3;
}
else if((_Edegree>= - EPSINON) && (_Edegree<= EPSINON))
{
fTemp=0.1;
}
return fTemp;
}