(slopeDegrees = 90型长双)
cout<<slopeDegrees<<endl;
if(slopeDegrees==90)cout<<"0"<<endl;
此代码不起作用...控制台仅打印90(其需要为90 \ n 0) 为什么? 我使用VS2010
答案 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;
}