0

找不到以下问题的答案:

我是 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; 传递结果 进入另一个字符串?

4

2 回答 2

2

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

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

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

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

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

于 2019-01-05T17:35:32.663 回答
2

您需要区分变量中的值,例如double somevalue = 1.0;使用 cout 在屏幕上显示给用户的值。流指令 setprecision 和 setfixed 将双精度/浮点值转换为某种输出格式。如果要将输出的内容转换为字符串,请使用 stringstream 而不是 cout。

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

对比

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

那么你有字符串 ss.str() 中的内容

于 2019-01-05T17:44:41.157 回答