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
, Получите ли вы точное значение, которое вы ожидали, это другой вопрос. Тип цели, который вы выбираете, может быть не в состоянии представить точное значение, которое вы хотите.