是否有任何标准方法可以将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的负数也是可以的。
答案 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.0
。 precision()
调用设置要显示的(最大)小数位数,std::ios::fixed
操纵器告诉是使用所有这些小数位,即使它们为零。
编辑:如果你看到一个减号,正如其他人指出的那样,可能是由于舍入错误。注意,在IEEE浮点数中也存在“负零”这样的事情。如果这是真正的问题,那么你必须编写代码来检查你的数字是否“接近”零,如果是,则将其打印为零。