Не удалось найти ответ на следующий вопрос:
Я новичок в 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; в другую строку?
Какова твоя цель?
Вы не можете присвоить переменной числовое значение с определенной точностью и сохранить точность.
Этот код не соответствует словам. Он записывает содержимое строки в консоль; std::fixed
и std::setprecision(0)
не влияют на вставку строк.
Я пытаюсь получить десятичное число из аргумента из командной строки, которое является десятичным числом, например 2445874.82708, но мне нужно преобразовать это число в double или float, которое должно возвращать то же самое значение
Смотрите мой ответ, вот вам и функции, которые преобразуют строку в число.
@HermesTrismegistus присваивает аргумент командной строки std::istringstream
, а затем использует operator>>
для чтения его в переменную float
/ double
. Или используйте std::stof()
или std::stod()
Вам все равно нужно преобразовать результат обратно в int
(но это никогда не изменит способ отображения целого числа).
return std::stoi(ss.str());
Это дает вам int
, простой int
, никакой точности, ничего. Вся обработка изменения точности и fixed
ничего не изменит, так как у вас есть строка в начале, которая не изменяется этими модификаторами.
Так что в основном вы ничего не делаете со своей функцией.
Если вы хотите преобразовать строку в значение, используйте stoi
, stod
...
Вы правы, я не понимаю сути. Я должен задать совершенно другой вопрос. Но это по-прежнему правильный ответ, поскольку я спросил, как вернуть результаты, и это сработало. Что все еще оставляет меня с другим вопросом, как сохранить номер 2445874.82708 нетронутым.
Вероятно, это дубликат stackoverflow.com/questions/588004/…
Вам нужно различать, какое значение у вас есть в переменной, например. double somevalue = 1.0;
с тем, что отображается на экране пользователю с помощью cout. Инструкции потока setprecision и setfixed преобразуют значение типа double / float в определенный формат вывод. Если вы хотите преобразовать то, что выводится в строку, используйте stringstream вместо cout.
std::cout << std::fixed << std::setprecision(0) << somevalue;
против
std::stringstream ss;
ss << std::fixed << std::setprecision(0) << somevalue;
тогда у вас есть содержимое в строке ss.str ()
fetchJD
возвращаетint
, а неstd::string