c++:将wstring转换为double类型

C++: converting wstring to double

本文关键字:double 类型 转换 wstring c++      更新时间:2023-10-16

在将wstring转换为double之前-如何用正则表达式验证它?Java没有问题,但是c++有问题。:)

我假设你有一个string,你想知道它是否是一个double或不是。下面的代码不使用正则表达式。相反,它初始化stringstream并从中读取double类型。如果字符串以非数字开头,则设置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;
}

或者这样做更简单:

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

如果是strKeyValue==0则表示它不是double