我想得到x = 1,234,567,890.098,765,432,1
。
#include <iostream>
#include <string>
#include <iomanip>
#include <locale>
using namespace std;
struct separated : numpunct<char>
{
string do_grouping() const { return "\03"; }
};
int main()
{
const double x = 1234567890.0987654321;
locale our_local(cout.getloc(), new separated);
cout.imbue(our_local);
cout << fixed;
cout << setprecision(10);
cout << "x = " << x << endl;
return 0;
}
输出:x = 1,234,567,890.0987654321
预期输出:x = 1,234,567,890.098,765,432,1
如果您可以按如下所示更通用,那就更好了
x = 1'234'567'890.098'765'432'1
x = 1_234_567_890.098_765_432_1
小数点是点(US-EN)。
如何将小数位分组?
x
的类型为double
,而不是文字字符串。
答案 0 :(得分:2)
这是一种算法:
创建一个函数,该函数将要转换的数字作为其参数。将该数字转换为字符串。扫描字符串中的小数点(同时注意可能出现无穷大或不确定的非数字结果)。如果找到,则处理字符串的其余部分,在每三位数后插入分隔符,直到到达字符串末尾或非位数时停止(例如,用E
来指定指数)。返回此字符串。
作为另一项练习,创建此函数的版本,该版本可以作为操纵器传递给cout
。