这可能是微不足道的,但我无法理解为什么会这样。
我正在尝试将“double”类型的数据附加到stringstream中,但它似乎已损坏。对此有何见解?
for (int metalNum = 0; metalNum< r_maxMetalNum; metalNum++)
{
if ((unsigned int)metalNum >= metalLayerV.size()) return false;
if (metalLayerV[metalNum].getThick() >= 0)
{
if (metalNum != 0) metalThickSS << ",";
cout << "JJJJ..." << metalLayerV[metalNum].getThick() << "\n";
metalThickSS << std::setprecision(3) << metalLayerV[metalNum].getThick();
}
}
cout << "Hello " << metalThickSS.str() << "\n";
输出是:
JJJJ...0.000000
JJJJ...0.000000
JJJJ...0.000000
JJJJ...0.000000
JJJJ...0.000000
JJJJ...0.000000
JJJJ...0.000000
JJJJ...0.000000
JJJJ...0.000000
JJJJ...0.000000
Hello 4.45e-321,4.45e-321,4.45e-321,4.45e-321,4.45e-321,4.45e-321,4.45e-321,4.45e-321,6.18e-320,6.18e-320
感谢大家的评论。我发现这实际上是一个微不足道的问题。我只需要使用带有输出字符串流的fixed和showpoint。
答案 0 :(得分:0)
您没有显示太多重要代码,所以我只能这样做
猜测,但先验,看起来你已经设定标准
固定格式,因此它只会在小数点后显示六位数
(并且任何小于0.0000005
的值都将显示为
0.000000
),但您的ostringstream
仍设置为
默认(或科学格式)。并假设IEEE浮动
点,您显示的值显示逐渐下溢,
这意味着它们非常非常接近0.0
,但不是
0.0
(并且可能涉及到一些粗心大意
它们的计算方式)。
答案 1 :(得分:0)
它可能是由代码中其他位置的cout << fixed
引起的。
请参阅以下代码:
double d = DBL_MIN / 10000000000000 * 2;
cout << d << endl;
cout << fixed;
cout << d << endl;
stringstream ss;
ss << setprecision(3);
ss << d;
cout << ss.str() << endl;
打印
4.44659e-321
0.000000
4.45e-321
这可能是您输出的唯一解释。