0

我正在学习 C++,并在一个简单的程序中遇到这些问题,所以请帮助我。

这是代码

#include<iostream>
using std::cout;
int main()
{   float pie;
    pie = (22/7);
    cout<<"The Value of Pi(22/7) is "<< pie<<"\n";
    return 0;
}

输出是

The Value of Pi(22/7) is 3

为什么 Pi 的值不是十进制的?

4

3 回答 3

3

那是因为你在做整数除法

你想要的是真正的浮动除法:

#include<iostream>
using std::cout;
int main()
{   
    float pie;
    pie = float(22)/7;//        22/(float(7)) is also equivalent

    cout<<"The Value of Pi(22/7) is "<< pie<<"\n";
    return 0;
}

但是,这种类型转换:float(variable)orfloat(value)不是类型安全的。

您可以通过确保您正在计算的值是浮点数来获得您想要的值,如下所示:

22.0/7

或者

22/7.0

或者

22.0/7.0

但是,这通常很麻烦,并且需要您跟踪您正在使用的所有类型。因此,最终和最好的方法涉及使用 static_cast

static_cast<float>(22)/7 

或者

22/static_cast<float>(7) 

至于为什么你应该使用 static_cast - 看到这个:

为什么使用 static_cast<int>(x) 而不是 (int)x?

于 2013-03-10T06:56:55.930 回答
0
pie = (22/7);

这里的除法是整数除法,因为两个操作数都是int.

你打算做的是浮点除法:

pie = (22.0/7);

这里22.0double,所以除法变为浮点除法(即使仍然7int)。

规则是如果两个操作数都是整数类型(例如int,,longchar),那么它是整数除法,否则它是浮点除法(即即使单个操作数是floatdouble)。

于 2013-03-10T06:57:25.490 回答
0

采用:

      pi = 22/7.0

如果您将 / 运算符的两个操作数作为整数给出,则执行的除法将是整数除法,结果不会是浮点数。

于 2013-03-10T07:15:16.500 回答