将字符串转换为双精度函数

时间:2015-03-29 23:53:06

标签: c++

我正在尝试将字符串转换为函数内部的double,然后返回一个布尔值,该布尔值将根据转换是否成功而更改。我的问题是如何检查转换是否失败?

//function definitions
bool isValidDouble(string inputString);

bool isValidDouble(string inputString)
{
    //Declarations
    bool validDouble = true;
    double convertedDouble = 0;

    convertedDouble = atof(inputString.c_str());


//      validDouble = false;
//      convertedDouble = 0;

    return validDouble;
}

// CODE FROM MAIN

int main()
{
    string userInput = "";
    cout << "Please Enter a number to convert. ";
    cin >> userInput;
    isValidDouble(userInput);
    return 0;
}

2 个答案:

答案 0 :(得分:2)

如果C ++ 11可用,您可以使用std::stod()。如果无法进行转换,则会抛出异常。

答案 1 :(得分:0)

atof没有提供正确的错误检查机制,在发生错误时返回0.0,但无法区分正确的0.0和错误的0.0

出于这个原因,<cstdlib>还包含std::strtod函数,该函数采用类型为char**的附加参数,该参数根据解析的范围进行调整。

示例:

ret = std::strtod(str, &ptr);
if (ret == 0 && ptr == str)
    /* conversion failed */
else if (ret == HUGE_VAL)
    /* out of range */
else
    /* success */