正如在this问题中所说,浮点数中的负零和正零之间存在一些差异。我知道这是因为一些重要的原因。我想知道的是一个短代码,以避免输出中的负零。
例如在以下代码中:
cout << fixed << setprecision(3);
cout << (-0.0001) << endl;
“ - 0.000”打印。但我想要“0.000”。
请注意,所有其他负数(例如-0.001)仍应使用前面的减号打印,因此只需* -1
即可。
答案 0 :(得分:3)
根据您的精确度尝试。
cout << ((abs(ans) < 0.0005)? 0.000: ans) << endl;
答案 1 :(得分:3)
怎么样:
cout << (value == 0.0 ? abs(value) : value) << endl;
答案 2 :(得分:1)
如果你关心任意精度,而不是只有3的固定精度,你需要做一点工作。基本上,你必须在cout之前做一个预先检查,看看这个数字是否会以你不喜欢的方式进行格式化。
你需要找到数字的数量级,看它是否会丢失不精确的数字,只留下符号位。
您可以使用数字绝对值的基数10对数来执行此操作。如果结果的负数大于您设置的精度,则数字将以您不想要的方式显示。
0.0001的log10是-4。
(-4)的负数为4.
4&gt; 3(任意精度) 因此价值将显得不高兴。
非常糟糕的伪代码:
float iHateNegativeZeros(float theFloat, int precision)
{
if((theFloat < 0.0f) &&
(-log10(abs(theFloat)) > precision))
{
return -theFloat;
}
else
{
return theFloat;
}
}