如果声明不起作用VS2010

时间:2012-08-19 14:31:17

标签: c++

(slopeDegrees = 90型长双)

cout<<slopeDegrees<<endl;

if(slopeDegrees==90)cout<<"0"<<endl;

此代码不起作用...控制台仅打印90(其需要为90 \ n 0) 为什么? 我使用VS2010

3 个答案:

答案 0 :(得分:4)

您尝试将90与浮点数进行比较。由于浮点现在总是精确到90.0000,但可以是89.9998或90.0001。当直接与另一个int或float值比较时,比较不成立。

不应该这样做,但是像:

if (Math.Abs(slopeDegrees - 90.0) < 0.001)  

0.001是您自己定义的准确度。

答案 1 :(得分:3)

比较与双打和其他浮点类型的相等性是危险的。 90 in double是近似值,而不是完全整数90。

最好比较一个阈值,而不是精确的不平等。类似的东西:

if (slopeDegrees > 89.9 && slopeDegrees < 90.1)
{
    cout << "0" << endl;
}

如果需要对某些重要值进行精确表示,则需要采用fixed point方式来表示这些值。

答案 2 :(得分:1)

因为您不想将double与完全相等进行比较。而是在一个范围内测试。例如:

const double THRESHOLD = 0.005;
double slopeDegrees = 90;

cout<<slopeDegrees<<endl;

if((slopeDegrees <= (90 + THRESHOLD)) && (slopeDegrees >= (90 - THRESHOLD)))
{
    cout<<"0"<<endl;
}