C++格式int数字用数字分隔数千

Meg*_*sa3 1 c++ format int

我正在使用Fedora上的Eclipse.我想用一个点来分隔数千个更容易理解的数字.这个数字是一个可以的整数值0<Value<99.999

所以...如果Value = 1000它显示1000和我想要的是显示1.000(注意点).我需要改变的代码是下一个:

char str[12];
sprintf(str, "%d", (int)(Value));
m_Text.SetText(str); 
Run Code Online (Sandbox Code Playgroud)

而我的想法是做一些像:

if (Value > 999) 
{
 int RightPart = (int)Value % 1000;
 int LeftPart = Val/1000 ;
}
Run Code Online (Sandbox Code Playgroud)

然后附加一个字符串LeftPart +"." + RightPart所以如果Value = 15631+.+5631.563

我的问题是这样做非常难看,我想知道是否有更好的方法.我在谷歌搜索并发现imbue,locale但他们只是为了cout.我已经看到过一些职位,像这样这个,但是这并不能帮助我与我的问题.

谢谢.

注意:我想说我不想改变输出格式.我想改变我收到的int,所以我可以在str var中得到点,稍后我将使用它.

注2:基本上代码必须:接收一个整数(Value),并将其像字符串一样发送到setText().setText()基本上会在屏幕上将它打印到何时何地,我希望它打印1.563而不是1563,这更难以阅读.

小智 5

使用stringstream和相同的imbue技术.

例如:

struct dotted : std::numpunct<char> {
    char do_thousands_sep()   const { return '.'; }  // separate with dots
    std::string do_grouping() const { return "\3"; } // groups of 3 digits
    static void imbue(std::ostream &os) {
        os.imbue(std::locale(os.getloc(), new dotted));
    }
};
Run Code Online (Sandbox Code Playgroud)

然后:

    std::stringstream ss;
    dotted::imbue(ss);
    ss << Value;
    std::cout << ss.str();
Run Code Online (Sandbox Code Playgroud)

Demo