我有一个类似的功能:
double foo(int a, int b)
{
double r=a+b;
return r/2.0;
}
当a = 10000和b = 10001时,它工作正常。返回10000.5
但是当a = 100000 b = 100001时返回100000
我也用其他数字测试过。仅当整数小于6位时才有效。(在输出时不使用setprecision)
我也尝试过,但这没有帮助。
double r= double(a+b);
任何人都可以解释发生了什么吗?如果我在输出中使用setprecision,就不会有问题。
但是,我无法控制何时以及如何打印输出,我只需要提交此功能。有什么我可以做的吗?
C double或long double缺省情况下在输出中使用6位精度。如果要编写2000.007,它将给出2000.01的输出,该值四舍五入为6位数字。但是在内存中它将具有正确的值。因此,正确的做法是
double foo(int a, int b)
{
double r=a+b;
cout<<setprecision(4)<<fixed;
return r/2.0;
}