我正在学习 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 的值不是十进制的?
我正在学习 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 的值不是十进制的?
那是因为你在做整数除法。
你想要的是真正的浮动除法:
#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 - 看到这个:
pie = (22/7);
这里的除法是整数除法,因为两个操作数都是int
.
你打算做的是浮点除法:
pie = (22.0/7);
这里22.0
是double
,所以除法变为浮点除法(即使仍然7
是int
)。
规则是如果两个操作数都是整数类型(例如int
,,long
等char
),那么它是整数除法,否则它是浮点除法(即即使单个操作数是float
或double
)。
采用:
pi = 22/7.0
如果您将 / 运算符的两个操作数作为整数给出,则执行的除法将是整数除法,结果不会是浮点数。