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

时间:2017-11-12 04:13:16

标签: c++ double cout

我想在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小工具。

1 个答案:

答案 0 :(得分:1)

使用std::fixed

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

Live Demo

更新:我想我误读了你要找的东西。仅std::fixed并未解决您要解决的问题 - 使用精度1表示整数,精度10表示分数。您可以使用std::modf()来区分它们(为简单起见,我会忽略无限和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;