gpt4 book ai didi

C++ printf 打印双读为 0

转载 作者:行者123 更新时间:2023-11-30 01:55:19 26 4
gpt4 key购买 nike

所以我想使用 printf 以便让列对齐,但 printf 似乎无法打印需要科学记数法的 double 。它只是以 0 的形式出现,但使用 cout 时结果很好。 'in' 和 'fn' 是结构 'x' 'y' 和 'z' 是 double

代码

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 is for both float and double (since float arguments are promoted to double); %lf is for long double. f prints with no exponent, e prints with an exponent, and g uses whichever looks better (following specific rules). – Keith Thompson

%g 得到了我正在寻找的确切行为!

最佳答案

作为std::printf() reference说,只需使用 %e:

std::printf( "One double in decimal scientific notation! %e" , my_double );

但正确的 C++ 方法是使用 std::cout 和一些操纵器,std::scientific在这种情况下:

std::cout << "One double in decimal scientific notation!" << std::scientific << my_double;

请注意,std::cout 的格式构成其状态的一部分,即您只需配置一次,格式应用于设置之后的任何输出操作,之前其他格式更改:

std::cout << std::scientific;

std::cout << std::pow( 10.0 , 10.0 ) << std::endl;
std::cout << std::pow( 10.0 , 20.0 ) << std::endl;
std::cout << std::pow( 10.0 , 30.0 ) << std::endl;

1e11
1e21
1e31

关于C++ printf 打印双读为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20848516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com