這可能很平凡,但我不明白爲什麼會發生這種情況。串流中數據被損壞
我試圖將「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'那樣讓他開始看到非零值)。 –