C ++ Точность на STOL и STII для пользовательского ввода - PullRequest
0 голосов
/ 01 апреля 2020

Пытаясь разобрать число с плавающей точкой в ​​строке, он возвращает с точностью до 0, я ищу 0,0.

Код:

queue<Car> getInputData() {
    string input;
    string line;
    string delin = " ";
    string::size_type sz = 0.0; 
    int counter = 0;
    queue<Car> cars;
    while (getline(std::cin, line) && !line.empty()) 
        {
        if (counter != 0)
            {
            queue<string> parse = getStringList(line, " ");
            _directions dir;
            int cid = std::stoi(parse.front());
            parse.pop();
            long arriv = std::stoi(parse.front()); //This returns 1 rather than 1.1
            parse.pop();
            dir.start = parseToDirection(parse.front(), true);
            parse.pop();
            dir.end = parseToDirection(parse.front(), false);
            parse.pop();
            Car car = Car(dir, cid, arriv);
            cars.push(car);

        }
        counter++;
    }
return cars; 
}

Пример ввода:

cid прибытие_ времени dir_original dir_target

0 1,1 ^ ^

1 2,0 ^ ^

2 3,3 ^ <</p>

3 3,5 vv

4 4,2 В>

5 4,4 ^ ^

6 5,7> ^

7 5,9 <^ </p>

Что Я пробовал: я пробовал Stol, Stoi, Stold, Stod, и ни один из них не работает для точности. Это возможно? Или есть работа вокруг которой я скучаю?

1 Ответ

1 голос
/ 01 апреля 2020

Если вы хотите проанализировать число с плавающей запятой, вам нужно использовать stod (или stof или stold, но обычно вам нужно stod). И вам нужно присвоить результат переменной, тип которой допускает числа с плавающей запятой, обычно double. (float и long double соответствуют stof и stold.)

long - это целочисленный тип.

...