c++:将wstring转换为double类型
C++: converting wstring to double
在将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
相关文章:
- 在c++中为double类型的数组创建一个unique_ptr
- C++:无法使用条件类型在模板函数中使用 'double' 类型的 lvalue 初始化 'char*' 类型的参数
- 格式“%lf”期望“ double *”类型的论点,但参数2具有“ poly term **”类型
- 错误:无法将 "double*" 类型的值分配给类型 "double" 的实体
- 使用Float或Double类型时不显示小数
- 'double' 和 'double' 类型的无效操作数
- 为什么用“std::chrono”进行时差测量时,与“double”类型相比,用“float”类型给出的有效数字更多
- 在当前的C++和Java中,double类型和float类型:if(x==0.0)是正确的
- double类型的c++变量总是将其值更改为-9,25596e+061
- 将一个short类型数组转换为double类型数组
- 最快的复制double类型的方法
- 将Vec*类型强制转换为double*类型
- c++验证String中的Double类型
- 将数据从const void *data转换为double类型
- 具有double类型的变量参数的函数的奇怪输出
- C++错误:无效的 'double' 类型的操作数和二进制"运算符"<未解析的重载函数类型"
- 在c#中使用非托管c++代码对所有double类型返回0
- 如何正确地在c++中打印double类型的cout
- 将double类型强制转换为int:它是如何工作的
- 错误:将' double* '和' double '类型的操作数转换为二进制' operator/ '无效