C ++:将wstring转换为double

时间:2014-03-22 20:59:55

标签: c++ double wstring

在将wstring转换为double之前 - 如何使用正则表达式对其进行验证? Java没问题,但是C ++提出问题.. :)

2 个答案:

答案 0 :(得分:1)

我想你有一个string,你想知道它是否是double。以下代码不使用正则表达式。相反,它初始化stringstream并从中读取一个双精度数。如果字符串以非数字形式开头,则将设置ss.fail()。如果它以数字开头,但不读取整个字符串,那么字符串末尾会出现非数字的内容。因此,如果一切顺利且字符串实际上只是一个数字,那么ss.eof() && !ss.fail()将为true

#include <iostream>
#include <sstream>

int main()
{
    std::stringstream ss("123.456");
    double mydouble;
    ss >> mydouble;

    if (ss.eof() && !ss.fail())
        std::cout << "yay, success: " << mydouble << std::endl;
    else
        std::cout << "that was not a double." << std::endl;

    return 0;
}

如果您需要转换宽字符串,还有std::wstringstream

您可能还想查看一下boost库,尤其是在Boost.Lexical_Cast。 使用此库,您可以执行以下操作:

#include <boost/lexical_cast.hpp>
#include <iostream>

int main()
{
    try
    {
        double mydouble = boost::lexical_cast<double>("123.456");
        std::cout << "yay, success: " << mydouble << std::endl;
    }
    catch(const boost::bad_lexical_cast &)
    {
        std::cout << "that was not a double." << std::endl;
    }

    return 0;
}

答案 1 :(得分:0)

或者这样做可能更简单:

std::wstring strKeyValue = "147.sd44";
double value = (double) _wtof(strKeyValue.c_str());

如果strKeyValue==0那么这意味着它不会加倍。