gpt4 book ai didi

c++ - 将 double 指数的可移植打印到 C++ iostreams

转载 作者:bug小助手 更新时间:2023-10-28 10:46:19 26 4
gpt4 key购买 nike

我想以可移植的方式(GCC、clang、MSVC++)将 double 值打印到 std::cout 以便输出在所有平台上都是相同的。

我对指数的格式有疑问。下面的程序

#include <iostream>
int main()
{
std::cout << 0.1e-7 << std::endl;
return 0;
}

GCC 有这个输出:

1e-08

和下面的 MSVC 输出

1e-008

如何使两个输出相同?

如果这是一个愚蠢的问题,我很抱歉,但到目前为止我还没有找到答案。所有格式似乎都围绕尾数之前所有内容的格式演变......

编辑:GCC 的输出是 1e-08 而不是 1e-8 (如最初所述),因此它符合 。很抱歉造成困惑。

EDIT2:实际上根据 Dietmar 的评论将“尾数”重命名为“指数”。 There also is a section on Wikipedia on mantissa vs. significant .

最佳答案

没有操纵器控制指数的格式(我假设您的意思是指数而不是尾数;此外,尾数的“官方”名称是重要)。更糟糕的是,我在 C 标准中看不到任何限制指数格式的规则。我意识到这是关于 C++ 但出于格式化细节的目的,C++ 标准是指 C 标准。

我知道的唯一方法是使用自己的 std::num_put<char>根据需要格式化值的构面。然后将这个方面放入 std::locale这又是imbue()编入 std::cout .一个潜在的实现可以使用默认的 std::num_put<char> facet(或snprintf(),不幸的是,可能更简单)格式化 float ,然后从指数中去除前导零。

关于c++ - 将 double 指数的可移植打印到 C++ iostreams,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9226400/

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