在字符串流中写入浮动值并保持"。"即使没有小数

时间:2017-08-23 16:14:40

标签: c++ stringstream

我想在给定double element的字符串中转换precision。我希望避免在字符串中添加不必要的0(因此我无法使用std::fixed)。此外,我希望始终保持"。"在我的字符串中。

所以我写了以下函数:

std::string toString(double element, int precision)
{
   std::stringstream stream;

   stream << std::setprecision(precision) << element;
   return stream.str();
}

toString(1.25, 2)  --> "1.25" OK
toString(1.25, 17) --> "1.25" OK

但是现在,想象一下我toString(1., 2),然后它返回给我"1",但我想保留&#34; .&#34;,所以我想{ {1}}

你有一个有效的方法吗?

PS:我不在C ++ 11中。

感谢您阅读我的问题。

1 个答案:

答案 0 :(得分:1)

要得到一个尾随&#39;。在所有情况下,如果没有尾随零,您将需要自己完成。然而,附加一个&#39;。&#39;到std::string,因为你有一个相当简单(如果你只想使用流,则更难)。

另请注意任何特定于语言环境的问题(例如,如果您需要支持这些问题,请使用&#39;。&#39;和&#39;,&#39;)。

std::stringstream ss;
ss << std::setprecision(precision) << element;
std::string str = stream.str();
if (str.find('.') == std::string::npos)
    str.push_back('.');
return str;

或者,您可以删除尾随零。