C++ String для Int с использованием StringStream не является точным

Я пытаюсь сделать что-то вроде следующего:

stringstream convert1(Model_str.substr(2, 12));
cout << (Model_str.substr(2, 12)) << endl; //output = 0.999999
convert1>>vertex1[VertexCounter];
cout << vertex1[VertexCounter] << endl; //output = 0

Есть ли причина, по которой он не является точным с точностью до 6 десятичных знаков при размещении его в моем массиве?

1 ответ

Решение

Когда вы извлекаете int из потока с >>, он читает до тех пор, пока есть символы, которые можно считать частью int, Целые числа не допускают дробных частей, поэтому в них нет десятичных точек int ценности. Это читать 0 из потока, хранится в вашем vertex1 элемент массива (при условии vertex1 это массив int) и оставил оставшиеся символы во входном буфере для последующей операции чтения.

Если вы хотите прочитать строку с плавающей запятой из потока, вам как минимум нужно прочитать тип, который поддерживает значения с плавающей запятой, такие как float или же double, Получите ли вы точное значение, которое вы ожидали, это другой вопрос. Тип цели, который вы выбираете, может быть не в состоянии представить точное значение, которое вы хотите.

Другие вопросы по тегам