У меня есть класс чтения csv-файла, содержащий числовые записи с не более чем двумя цифрами после десятичной точки.Странное поведение при преобразовании float в int
int ReadCellWithFloat(int cellNumber, int multiplier) throw (FSByFieldException)
{
GoToCell(cellNumber);
float number;
FileStream >> number;
std::cout << "what we've got: " << number;
if (!FileStream.good())
{
throw BuildException(FSByFieldException::NOT_FLOAT);
}
while (multiplier--)
{
number *= 10;
}
std::cout << ' ' << number << ' ' << (int) number << std::endl;
PassCell(); // here meaning pass comma separator
return (int) number;
}
Для ячейки, содержащей поплавок «8,49» выходы выход:
what we've got: 8.49 849 848
Почему 849 превращается в 848 на литье в целое и как это исправить?
См. [Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) – syam
Этот вопрос задан сотни раз в SO – GuLearn
@ RaymondChen Я пришел сюда из очереди просмотра, но действительно ли это дубликат, учитывая, что другой вопрос касается C#? – sashoalm