【发布时间】:2014-01-17 20:50:39
【问题描述】:
所以我想使用 printf 以便可以使列对齐,但 printf 似乎无法打印需要科学记数法的双精度数。它只是以 0 的形式出现,但使用 cout 它会很好。 'in' 和 'fn' 是结构体 'x' 'y' 和 'z' 是双精度的
代码
printf("Facet Normal: %lf %15lf %15lf\n", in->fn.x, in->fn.y, in->fn.z);
cout << "cout test: " << in->fn.x << endl;
输出
Facet Normal: -0.000000 -0.894426 0.447215
cout test: -9.6137e-08
我似乎无法让 printf 正常工作。我让整个功能与 cout 一起正常工作,但就像我说的那样,我希望事情能很好地排列。
编辑:
正如 Oli 所说,使用 %e 确实可以正确打印。通过在整个过程中使用 %e ,它会将所有内容都以科学记数法表示,并且数据集中的许多数字实际上并不真正需要它。 Cout 似乎根据需要在 %lf 和 %e 之间转换。是否有一种简单的方法可以让 printf 也获得这种行为?
答案:
%f 用于 float 和 double(因为 float 参数被提升为 double); %lf 是 long double。 f 打印不带指数,e 打印带指数,和 g 使用看起来更好的那个(遵循特定规则)。 ——基思·汤普森
%g 得到了我正在寻找的确切行为!
【问题讨论】:
-
当你使用 C++ 时,最好使用 C++ iostream,而不是 stdio.h:那更像是 C 代码
-
%f用于float和double(因为float参数被提升为double);%lf用于long double。f打印没有指数,e打印有指数,g使用看起来更好的那个(遵循特定规则)。
标签: c++ double printf cout scientific-notation