在字符串流中写入一个浮点值并保留“。”即使没有小数
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;
或者,您可以去除尾随零。
我想在给定的 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;
或者,您可以去除尾随零。