gpt4 book ai didi

c++ - 格式化 float : returning to default

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:25 25 4
gpt4 key购买 nike

在返回“默认格式”的意义上,我遇到了浮点值的格式问题。假设我有 2 个花车:

float f1 = 3.0f, f2 = 1.5f;
std::cout << f1 << " - " << f2 << "\n";

将这些显示为:3 - 1.5

现在,出于某种原因,我需要在 std::cout 上设置精度(用于其他打印):

cout << std::precision(2);

如果我再次打印我的两个 float ,这将导致:3.00 - 1.50

现在我想恢复默认格式。在 C++11 之前,这似乎很困难(或者是吗?)。但是,谢谢,我现在有了这个新标志: std::defaultfloat .让我们试试:

std::cout << std::defaultfloat << f1 << " - " << f2;

将打印:3 - 1.50。很好。

哦,但是等等。假设我有:

float f1 = 444.0f, f2 = 444.5f;

默认打印会显示:444 - 444.5

设置精度(和“固定”):

cout << std::precision(2) << std::fixed;

将显示:444.00 - 444.50

但回到“默认”:

std::cout << std::defaultfloat << f1 << " - " << f2;

将打印:4.4e+02 - 4.4e+02(自动切换到科学格式)。而且,如果您想知道,附加“固定”标志将保持先前分配的精度,因此不会返回到原始设置。

问题:如何回到默认模式?

FWIW,live code is here .

编辑:此问题已被标记为重复问题,但linked answer没有给出问题的答案,只是提到如何得到当前的精度。

编辑 2:根据要求,这里是演示问题的完整代码:

int main()
{
float f1 = 444.5f, f2=443.0f;
std::cout << f1 << " - " << f2 << "\n";
std::cout << std::fixed << std::setprecision(2);
std::cout << f1 << " - " << f2 << "\n";
std::cout << std::defaultfloat;
std::cout << f1 << " - " << f2 << "\n";
}

结果:

444.5 - 443
444.50 - 443.00
4.4e+02 - 4.4e+02

最佳答案

在 C++20 中你可以使用 std::format这是一个无状态的 API。特别是,在一个调用中指定精度不会影响另一个调用:

float f1 = 444.0f, f2 = 444.5f;
std::cout << std::format("{} - {}\n", f1, f2);
// Output: 444 - 444.5
std::cout << std::format("{:.2f} - {:.2f}\n", f1, f2);
// Output: 444.00 - 444.50
std::cout << std::format("{} - {}\n", f1, f2);
// Output: 444 - 444.5

std::format 尚未广泛使用,但您可以使用 the {fmt} library , std::format 是基于, 同时。它还提供了结合格式化和 I/O 的 print 函数:

float f1 = 444.0f, f2 = 444.5f;
fmt::print("{} - {}\n", f1, f2);
// Output: 444 - 444.5
fmt::print("{:.2f} - {:.2f}\n", f1, f2);
// Output: 444.00 - 444.50
fmt::print("{} - {}\n", f1, f2);
// Output: 444 - 444.5

免责声明:我是 {fmt} 和 C++20 std::format 的作者。

关于c++ - 格式化 float : returning to default,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53030834/

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