很好地格式化C ++中的数字

时间:2013-04-04 15:37:06

标签: c++

在Ada中,可以使用下划线来编写用于分隔数字的数字,这极大地提高了可读性。例如:1_000_000(相当于1000000) C ++有类似的方法吗?

编辑:这是关于源代码的问题,而不是I / O.

5 个答案:

答案 0 :(得分:10)

C ++本身并不支持这种做法。但是,这里有两个解决方法:

答案 1 :(得分:9)

目前无法做到这一点。但是,有一项建议是引入digit seperators (N3499)。他们还没有选择他们想用作分隔符的角色。目前的建议是:

  • 空间:4 815 162 342
  • 严重重音:4`815`162`342
  • 单引号:4'815'162'342
  • 下划线:4_815_162_342

不幸的是,他们都有提案中描述的问题。

您可以使用用户定义的文字来处理hacky方法:

long long operator "" _s(const char* cstr, size_t) 
{
    std::string str(cstr);
    str.erase(std::remove(str.begin(), str.end(), ','), str.end());
    return std::stoll(str);
}

int main()
{
    std::cout << "4,815,162,342"_s << std::endl;
}

这将打印出来:

4815162342

它只是从给定的文字中删除所有逗号并将其转换为整数。

答案 2 :(得分:4)

int main()
{
   int x = 1e6;
}

答案 3 :(得分:2)

你总是可以定义一个变量宏,就像N(123,456,678)一样。不过,它比它的价值更麻烦。特别是,您可能必须为可移植代码计算参数的某些visual c ++特性。

答案 4 :(得分:0)

通过{{1}使用适当的区域设置方面(在本例中为num_put){I}来完成I / O流的完全可能。

(假设您正在谈论I / O.如果您正在谈论源本身,那么从C ++ 11开始就不可能。)