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

时间:2019-01-05 17:30:53

标签: c++ iostream sstream

找不到以下问题的答案:

我是C ++的新手,现在正在做一些测试。我正在使用std :: fixed和std :: setprecision函数来获取带有5个零的十进制数。这可以使用cout起作用,但是我不知道如何将结果分配给变量,而不是使用cout打印它们。

.as-console-wrapper { max-height: 100% !important; top: 0; }

我尝试了使用sstream之类的方法,但是每当我尝试将结果分配给另一个字符串,以便我可以返回结果时,都会使编译器失败。

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

哪个会导致编译器出错:

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

    return temp;
}

那么我怎样才能传递std :: fixed << std :: setprecision(0)<< str;变成另一个字符串?

2 个答案:

答案 0 :(得分:2)

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

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

这为您提供了int,简单的int,没有精度,没什么。更改精度和fixed的所有过程都不会更改任何内容,因为开头有一个字符串,这些修饰符不会更改该字符串。

因此,基本上,您对功能不做任何事情。

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

答案 1 :(得分:2)

您需要区分变量中的值,例如double somevalue = 1.0;,并使用cout向用户显示在屏幕上。流指令setprecision和setfixed将double / float值转换为特定的 output 格式。如果要将输出转换为字符串,请使用stringstream而不是cout。

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

vs

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

然后您将内容包含在字符串ss.str()