gpt4 book ai didi

C++格式化int数字以用点分隔千位

转载 作者:行者123 更新时间:2023-11-30 00:48:22 24 4
gpt4 key购买 nike

我在 Fedora 上开发 Eclipse。我想让一个数字更容易理解,使用一个点来分隔千位。这个数字是一个整数值,可以是 0<Value<99.999

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

char str[12];
sprintf(str, "%d", (int)(Value));
m_Text.SetText(str);

我的想法是做类似的事情:

if (Value > 999) 
{
int RightPart = (int)Value % 1000;
int LeftPart = Val/1000 ;
}

然后追加一个字符串 LeftPart + "."+ RightPart so if Value = 1563它将是1+.+563这是1.563

我的问题是这样做非常丑陋,我想知道是否有更好的方法。我在谷歌上搜索并找到了 imbuelocale但它们仅适用于 cout。我也看过一些帖子,比如 thisthis但这对我的问题没有帮助。

谢谢。

注意:我想说明我不想更改输出格式。我想更改我收到的 int,以便我可以在 str var 中包含点,我稍后将使用这些点。

注意 2:基本上,代码必须:接收一个整数(值),并将其像字符串一样发送到 setText()。 setText() 基本上会在需要的地方和时间将其打印在屏幕上,我希望它打印 1.563 而不是 1563,后者更难阅读。

最佳答案

使用 stringstream 和相同的注入(inject)技术。

例如:

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));
}
};

然后:

    std::stringstream ss;
dotted::imbue(ss);
ss << Value;
std::cout << ss.str();

Demo

关于C++格式化int数字以用点分隔千位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31656508/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com