打印相同变量时为 cout 和 printf 获取不同的输出

Getting different output for cout and printf while printing same variable

使用 Devc++ 对于 printf 得到 0.00000 并让 cout 得到一些奇怪的输出。

#include<iostream>
#include<cmath>
#include<stdio.h>
using namespace std;
main()
{
   float i,j=M_PI;
   i=sin(j);
   printf("%f \n",i);
   cout<<i;
}

在我看来 M_PI 不完全是 pi(我们知道它不可能),sin 的结果不完全为零。

printf%f 表示输出数字四舍五入为 "normal" 小数,而 cout 使用自适应格式(我记得在 printf 中大约是 %g ) 使用科学记数法表示小数。

另请注意,%f 表示 double,但可变参数在传入时有助于将您的 float 提升为双精度。

如前所述,您会得到不同的输出值,因为 cout 使用科学记数法而 printf 默认为小数点后 6 位。如果使用

增加它
printf("%.013f \n",i);

您将获得相同的值。

现在并不是所有的十进制数都可以用浮点数表示,这就是为什么您得不到预期结果的原因。

另外here's一个关于sin如何在不同平台上实现的问题,你可以看到为什么PI的正弦可能不是0。