-1

(slopeDegrees=90 type long double)

cout<<slopeDegrees<<endl;

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

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

4

3 回答 3

4

您尝试将 90 与浮点数进行比较。因为浮点数现在总是正好是 90.0000,但也可以是 89.9998 或 90.0001。当直接与另一个 int 或 float 值比较时,比较不成立。

这不应该那样做,而是像:

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

0.001 是您可以自己定义的一些精度。

于 2012-08-19T14:35:14.283 回答
3

将相等性与双精度数和其他浮点类型进行比较是充满危险的。double 中的 90 是一个近似值,而不是整数90。

最好将其与阈值内进行比较,而不是与确切的不平等进行比较。就像是:

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

如果某些重要值需要精确表示,您需要研究一种固定点方式来表示这些值。

于 2012-08-19T14:34:51.920 回答
1

因为您不想比较double完全相等。而是在一个范围内测试。前任:

const double THRESHOLD = 0.005;
double slopeDegrees = 90;

cout<<slopeDegrees<<endl;

if((slopeDegrees <= (90 + THRESHOLD)) && (slopeDegrees >= (90 - THRESHOLD)))
{
    cout<<"0"<<endl;
}
于 2012-08-19T14:36:03.860 回答