gpt4 book ai didi

c++ - 在 C++ 中打印至少一位小数?

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

我想在 C++ 中将 double 值字符串化,最多保留 10 位小数,所以我使用类似的东西

std::stringstream s;
double value = 3.1415926;
s << "value is " << std::setprecision(10) << value;

但是,如果 value 有一些精确的整数值,例如 4.0,我希望它打印 4.0 而不仅仅是 4。有没有什么方法可以使用 C++ stringstream,甚至是老式的 snprintf() 来实现这一点?

到目前为止,我能想到的唯一解决方案是将 valuefloor(value) 进行比较:

std::stringstream s;
if (floor(value) == value)
s << std::setprecision(1) << std::fixed << value;
else
s << std::setprecision(10) << value;

如果需要,我会保留该解决方案,但我很好奇我是否忽略了一些可以帮助我避免条件语句的 iostream 小工具。

最佳答案

使用std::fixed :

s << "value is " << std::fixed << std::setprecision(10) << value;

Live Demo


更新:我想我误读了您要查找的内容。 std::fixed 本身并不能解决您要解决的问题 - 对整数使用精度 1,对小数使用精度 10。您可以使用 std::modf()区分它们(为简单起见,我将忽略 Infinite 和 NaN,但请确保在实际代码中考虑到它们),例如:

#include <cmath>
std::stringstream s;
double integral;
if (std::modf(value, &integral) == 0)
s << std::fixed << std::setprecision(1) << integral;
else
s << std::fixed << std::setprecision(10) << value;

关于c++ - 在 C++ 中打印至少一位小数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47245363/

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