在字符串流中写入一个浮点值并保留“。”即使没有小数

Writing a floating value in a stringstream and keep "." even if there is no decimal

我想在给定的 precision 处转换字符串中的 double element。我想避免在我的字符串中出现不必要的 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),然后它 returns 给我 "1",但我想保留“.”,所以我想要 "1."

你有有效的方法吗?

PS:我不在 C++11 中。

感谢您阅读我的问题。

获取尾随 '.'在所有情况下,如果没有尾随零,您将需要自己做。但是附加一个“。”到 std::string 因为你有一个是相当简单的(如果你只想使用流就更难了)。

如果您需要支持这些问题,还要注意任何特定于语言环境的问题(例如“.”和“,”的不同用法)。

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

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