#include<iostream>
using namespace std;
int main (void)
{
int test,r,i=0;
float f;
cin>>test;
i++;
while ( test!=0 )
{
cin>>r;
f = 4*r*r + 0.25;
cout<<"Case "<<i<<":"<<" "<<f<<"\n";
i++;
test--;
}
return 0;
}
我制作了这个简单的程序来计算表达式4*r*r+0.25
的值。这里r
将始终是1&lt; = r&lt; = 1000000之间的整数。我必须将上述表达式的值打印到两个小数位。但是,当我输入r
任何&gt; = 50的值时,它仅将结果显示为output.2
,例如,在将值输入为50
时,它会显示结果为10000.2
。为什么会这样?
我尝试使用double而不是float,但它没有帮助。
答案 0 :(得分:5)
默认情况下,浮点值最多打印六位有效数字。您可以使用setprecision
操纵器指定更高的精度:
#include <iomanip>
std::cout << std::setprecision(10); // specify up to 10 significant figures
对于较大的值,您将遇到至少两个问题:
4*r*r
使用整数运算,如果整数类型不够大,则会溢出。您可能希望使用int64_t
或浮点类型来支持最大为1000000的输入值。float
只能准确地表示最多约七位小数,因此您仍然会失去r
超过几千的值的精度。 double
应足以使输入值达到1000000。答案 1 :(得分:3)
您需要设置精度,例如:
f = 4*r*r + 0.25;
cout<<"Case "<<i<<":"<<" "<< setprecision(2) << fixed << f<<"\n";
输出:
10000.25
确保包含iomanip
。
答案 2 :(得分:2)
让我们看一些简化的代码:
#include <iostream>
#include <iomanip>
int main (void) {
std::cout << 10000.25 << "\n";
std::cout << std::setprecision(20);
std::cout << 10000.25 << "\n";
}
输出:
10000.2
10000.25
如果你想看到这一点,我在ideone.com上添加了一个例子。