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

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

本文关键字:小数 字符串      更新时间:2023-10-16

我想在给定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),然后它"1"回到我身边,但我想保留".",所以我想"1."

你有有效的方法来做到这一点吗?

PS:我不在第 11 C++。

感谢您阅读我的问题。

要在所有情况下都获得尾随的".",而不同时获得尾随零,您需要自己做。但是,将"."附加到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;

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