在 C++ 中打印至少一位小数?
print at least one decimal place in c++?
我想在 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()
来实现吗?
到目前为止,我能想到的唯一解决方案是将 value
与 floor(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;
更新:我想我看错了你要找的东西。 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++ 中将 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()
来实现吗?
到目前为止,我能想到的唯一解决方案是将 value
与 floor(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;
更新:我想我看错了你要找的东西。 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;