我有一个表示浮点数的字符串,例如" 1000.34"。我想对该字符串应用一些千位和小数分隔符规则,例如,它变成" 1,000.34"。
我尝试执行以下操作:
ss.imbue(std::locale(ss.getloc(), new mySeparator));
struct mySeparator : std::numpunct<char> {
char do_decimal_point() const {
return '.';
}
char do_thousands_sep() const {
return ',';
}
std::string do_grouping() const {
return "\000"; // Groups of 3
}
};
但只有当它是数字而不是字符串时才有效:
double number = 1000.34;
ss << number;
如果我拥有的是表示数字的字符串,我该怎么做呢?有替代方法吗?
答案 0 :(得分:0)
不确定为什么需要使用std::stringstream
,但是如果你只想操纵字符串,这是数字,并从小数点开始每隔3位数加,
(如果没有小数点,则为数字的结尾)你可以只是:
#include <iostream>
#include <string>
int main()
{
std::string num = "-4324234324.234";
size_t i = num.rfind('.');
if (i == num.npos) i = num.size();
const size_t digits = 3 + (num.data()[0] == '-');
while (i > digits) num.insert(i -= 3, 1, ',');
std::cout << num << std::endl;
}
-4,324,234,324.234