-1

我想在 C++ 中将 char * 转换为 double。但在此之前,我想检查 char * 是否是正确的双精度数。所以我做了这个代码:

bool                    Tools::m_CheckIfDouble(char *p_nb)
{
    if (p_nb == NULL)
        return (false);
    for (unsigned int v_i = 0; p_nb[v_i]; v_i++)
        if ((p_nb[v_i] < '0' || p_nb[v_i] > '9') && (p_nb[v_i] != '.' && p_nb[v_i] != '-'))
            return (false);
    return (true);
}

但我不知道如何检查 char * 是否有双重溢出(如果 char * 的值大于 DBL_MAX 的值或小于 DBL_MIX 的值)。

4

1 回答 1

2

标准库函数strtod应该可以解决问题:

#include <cstdlib>
#include <cerrno>

double convert(char const * str)
{
    char * e;
    double res = std::strtod(str, &e);

    if (e == str || *e != 0) { /* error (invalid string) */ }

    if ((res == HUGE_VAL || -res == HUGE_VAL) && errno == ERANGE) { /* overflow */ }

    if (res == 0 && errno == ERANGE) { /* underflow */ }

    return res;
}

你明白了;您可以根据自己的要求自定义错误处理。

于 2012-11-06T04:12:11.533 回答