这可能很平凡,但我不明白为什么会发生这种情况。串流中数据被损坏
我试图将“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
感谢所有为您的意见。我发现这实际上是一个微不足道的问题。我只需要使用输出stringstream使用固定和显示点。
什么是损坏的?像4.45e-321这样的字符串是metalLayerV [metalNum] .getThick()的值,对不对? – Mine
@我好吧,他们可能是不对的,因为'DBL_MIN'可能在'2.225E-308'附近。当你最终得到这样的低于正常值时,你计算它们的方式会有一些错误。或者选择尺寸---测量parsecs中铝箔的厚度(尽管在IEEE的双倍范围内有足够的范围,即使这样也不会导致问题)。 –
@WernerHenze我不认为精度是问题。输出到'std :: cout'的格式表明它已被设置为'fixed'格式,所以精度指定小数点后的数字位数(并且必须像'320'那样让他开始看到非零值)。 –