如何将 std:fixed << setprecision(5) 的结果分配给 C++ 中的变量

How to assign results from std:fixed << setprecision(5) to variable in 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 之类的方法,但每当我尝试将结果分配给另一个字符串以便我可以 return 结果时,编译器就会失败。

// 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; 的结果?进入另一个字符串?

您仍然需要将结果转换回 int(但这永远不会改变整数的显示方式)。

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

这给你一个 int,一个简单的 int,没有精度,什么也没有。所有更改精度和 fixed 的处理都不会改变任何内容,因为开头有一个字符串,这些修饰符不会更改它。

所以基本上你没有对你的函数做任何事情。

如果要将字符串转换为值,请使用 stoistod...

您需要区分变量中的值,例如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()

中的内容