Как присвоить результаты из std: fixed << setprecision (5) переменной в c ++ - PullRequest
0 голосов
/ 05 января 2019

Не удалось найти ответ на следующий вопрос:

Я новичок в C ++ и сейчас делаю несколько тестов. Я использую функции std :: fixed и std :: setprecision, чтобы получить десятичное число с 5 нулями. Это работает с использованием cout, но я понятия не имею, как присвоить результаты переменной вместо того, чтобы печатать их с помощью cout.

//Works
int fetchJD(std::string str) {
    std::cout << std::fixed << std::setprecision(0) << str;
    return 0;
}

Я пробовал что-то вроде использования sstream, но всякий раз, когда я пытаюсь присвоить результаты другой строке, чтобы я мог вернуть результаты, допускается сбой компилятора.

// Not working  
int fetchJD(std::string str)
{
    std::stringstream ss;
    string temp;
    ss << std::fixed << std::setprecision(0) << str;
    temp = ss.str();

    return temp;
}

Что приводит к ошибке компилятора:

In function ‘int fetchJD(std::__cxx11::string)’:
astroapp.cpp:43:12: error: cannot convert ‘std::__cxx11::string {aka 
std::__cxx11::basic_string<char>}’ to ‘int’ in return
return temp;

Так как я могу передать результаты из std :: fixed << std :: setprecision (0) << str; в другую строку? </p>

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Вы должны различать, какое значение у вас есть в переменной, например, double somevalue = 1.0; с тем, что отображается на экране пользователю с помощью cout. Команды потока setprecision и setfixed преобразуют значение типа double / float в определенный формат output . Если вы хотите преобразовать то, что выводится в строку, тогда используйте stringstream вместо cout.

std::cout << std::fixed << std::setprecision(0) << somevalue;

против

std::stringstream ss;
ss << std::fixed << std::setprecision(0) << somevalue;

тогда у вас есть содержимое в строке ss.str ()

0 голосов
/ 05 января 2019

Вам все еще нужно преобразовать результат обратно в int (но это никогда не изменит способ отображения целого числа).

return std::stoi(ss.str());

Это дает вам int, простое int, без точности, ничего. Вся обработка изменения точности и fixed ничего не изменит, так как в начале у вас есть строка, которая не изменяется этими модификаторами.

Так что, в принципе, вы ничего не делаете со своей функцией.

Если вы хотите преобразовать строку в значение, используйте stoi, stod ...

...