如何将小数位分组?

时间:2019-04-12 23:13:28

标签: c++

我想得到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,而不是文字字符串。

1 个答案:

答案 0 :(得分:2)

这是一种算法:

创建一个函数,该函数将要转换的数字作为其参数。将该数字转换为字符串。扫描字符串中的小数点(同时注意可能出现无穷大或不确定的非数字结果)。如果找到,则处理字符串的其余部分,在每三位数后插入分隔符,直到到达字符串末尾或非位数时停止(例如,用E来指定指数)。返回此字符串。

作为另一项练习,创建此函数的版本,该版本可以作为操纵器传递给cout