我正在尝试将字符串转换为函数内部的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;
}
答案 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 */