我正在使用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 = 1563它1+.+563是1.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)