带有ostream的带符号0.0的统一输出

时间:2014-02-05 20:25:41

标签: c++ floating-point ostream

是否有任何标准方法可以将ostream设置为无标记地均匀打印带符号0.0?

或者这是最简单的解决方案吗?:

double d = -0.0;
std::cout << ( d==0 ? 0.0 : d);

修改

我不想abs全部,因为我想看到非0的负数。我只是不想看到-0.0(我的意思是真正的 -0,而不是非常接近的)。如果您有例如,可能会发生数据集double data[100];并将其镜像:for(...) data[i]*=-1;。并且由于浮点场固定和小精度的-0.0输出对于接近0的负数也是可以的。

2 个答案:

答案 0 :(得分:1)

你也可以尝试像这样打印

std::cout << ( 0.0 + d);

答案 1 :(得分:0)

double d = 0;
std::cout.precision(1);
std::cout.setf(std::ios::fixed);
std::cout << d << std::endl;

这会打印0.0precision()调用设置要显示的(最大)小数位数,std::ios::fixed操纵器告诉是使用所有这些小数位,即使它们为零。

编辑:如果你看到一个减号,正如其他人指出的那样,可能是由于舍入错误。注意,在IEEE浮点数中也存在“负零”这样的事情。如果这是真正的问题,那么你必须编写代码来检查你的数字是否“接近”零,如果是,则将其打印为零。