0

如何使用 C++ 输入 100k 或 30M 或 41.2G 等数字?有图书馆功能吗?或者我应该自己写一个解析器?

编辑:我自己想出了一个解决方案:

static float my_strtod(const char *str)
{
    char *pEnd;
    double val = strtod(str, &pEnd);
    switch (*pEnd)
    {
        case 'k' : val *= 1.0e3; break;
        case 'M' : val *= 1.0e6; break;
        case 'G' : val *= 1.0e9; break;
    }
    return val;
} // end of my_strtod
4

2 回答 2

2

你想使用 C++11 的operator"",像这样:

constexpr long operator"" k(long d) {
     return d * 1000;
}

然后您可以创建常量,例如:

long distance = 100k;
于 2013-09-25T08:57:49.210 回答
0

你真的想要一个图书馆吗?自己用这种方式定义东西怎么样:

typedef double T;
T k = 1e3;
T M = 1e6;
T G = 1e9;
T m = 1e-3;
T u = 1e-6;

然后将它们用作被乘数?

可能这些名字并不是最好的。您可以找到一个更好的约定,它不会与您的程序中的任何内容发生冲突。

于 2013-09-25T08:55:48.060 回答