Как присвоить результаты из std: fixed << setprecision (5) переменной в C++

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

Я новичок в 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; в другую строку?

fetchJD возвращает int, а не std::string
Jans 05.01.2019 18:32

Какова твоя цель?

Fureeish 05.01.2019 18:33

Вы не можете присвоить переменной числовое значение с определенной точностью и сохранить точность.

user2100815 05.01.2019 18:33

Этот код не соответствует словам. Он записывает содержимое строки в консоль; std::fixed и std::setprecision(0) не влияют на вставку строк.

Pete Becker 05.01.2019 18:45

Я пытаюсь получить десятичное число из аргумента из командной строки, которое является десятичным числом, например 2445874.82708, но мне нужно преобразовать это число в double или float, которое должно возвращать то же самое значение

Arjan 05.01.2019 18:58

Смотрите мой ответ, вот вам и функции, которые преобразуют строку в число.

Matthieu Brucher 05.01.2019 19:01
Я пытаюсь получить десятичное число из аргумента из командной строки, которое является десятичным числом, например 2445874.82708, но мне нужно преобразовать это число в double или float, которое должно возвращать то же самое значение Вы не можете этого сделать. Это не то, как аппаратное обеспечение с плавающей запятой кодирует число.
drescherjm 05.01.2019 20:56

@HermesTrismegistus присваивает аргумент командной строки std::istringstream, а затем использует operator>> для чтения его в переменную float / double. Или используйте std::stof() или std::stod()

Remy Lebeau 05.01.2019 22:45
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
3 276
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

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

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

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

Вы правы, я не понимаю сути. Я должен задать совершенно другой вопрос. Но это по-прежнему правильный ответ, поскольку я спросил, как вернуть результаты, и это сработало. Что все еще оставляет меня с другим вопросом, как сохранить номер 2445874.82708 нетронутым.

Arjan 05.01.2019 19:13

Вероятно, это дубликат stackoverflow.com/questions/588004/…

Matthieu Brucher 05.01.2019 19:16

Вам нужно различать, какое значение у вас есть в переменной, например. 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 ()

Другие вопросы по теме