我遇到了一个浮点数格式的问题,想要返回“默认格式”。 假设我有两个浮点数:
float f1 = 3.0f, f2 = 1.5f;
std::cout << f1 << " - " << f2 << "\n";
将显示为:3 - 1.5
现在,由于某种原因,我需要在std::cout
上设置精度(用于其他打印):
cout << std::precision(2);
如果我再次打印我的两个浮点数,结果将是: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
设置精度(和“fixed”):
cout << std::precision(2) << std::fixed;
将显示:444.00-444.50
但回到“默认”:
std::cout << std::defaultfloat << f1 << " - " << f2;
将打印:
4.4e+02 - 4.4e+02
(自动切换到科学格式)。如果你想知道,附加“fixed”标志将保持之前分配的精度,因此不会返回原始设置。
问题: 如何回到默认模式?
FWIW,live code is here。
Edit: 这个问题被标记为重复了,但是linked answer并没有提供答案,它只提到了如何获得当前精度。
Edit 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