Это может быть тривиально, но я не мог понять, почему это происходит.Данные, поврежденные в stringstream
Я пытаюсь добавить данные типа «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
Спасибо всем за ваши комментарии. Я узнал, что это действительно тривиальный вопрос. Мне просто нужно использовать фиксированную и showpoint с выходной строкой.
Что такое повреждение? Строки типа 4.45e-321 являются значениями для metalLayerV [metalNum] .getThick(), правильно? – Mine
@Mine Ну, они, вероятно, не правы, так как 'DBL_MIN', вероятно, около' 2.225E-308'. Когда вы оказываетесь в подобном подобном случае, есть что-то не так, как вы их вычисляете. Или в вашем выборе размеров --- измерение толщины алюминиевой фольги в парсеках (хотя в IEEE-диапазоне имеется достаточный диапазон, даже если это не вызовет проблем). –
@WernerHenze Я не думаю, что это проблема. Формат вывода в 'std :: cout' предполагает, что он был установлен в формат' fixed', поэтому точность задает число цифр после десятичной (и для него должно было быть что-то вроде '320' для начала видя ненулевые значения). –