C++ 字符串到双精度转换始终为0
我试图从二进制文件中读取双精度浮点数,并将其分配给静态双变量。我已经尝试了许多方法,但是转换的结果是0,而不管使用哪种方法。数字是从文件中正确读取的(作为一个字符数组),但是当我尝试转换它时会发生一些事情。。。包含的标题为:#包含C++ 字符串到双精度转换始终为0,c++,qt,C++,Qt,我试图从二进制文件中读取双精度浮点数,并将其分配给静态双变量。我已经尝试了许多方法,但是转换的结果是0,而不管使用哪种方法。数字是从文件中正确读取的(作为一个字符数组),但是当我尝试转换它时会发生一些事情。。。包含的标题为:#包含#包含#包含 该方法的代码段如下所示: FILE * pFile; char mystring [100]; double v; string temp; QString t_string; pFile = fopen ("path_to_binary_file","r
FILE * pFile;
char mystring [100];
double v;
string temp;
QString t_string;
pFile = fopen ("path_to_binary_file","r");
if (pFile != NULL)
{
if ( fgets (mystring , 100 , pFile) != NULL )
{
//I am putting a \0 on the last position since my array finishes with \n
mystring[strlen(mystring) - 1] = '\0';
temp.assign(mystring, mystring + 12);
t_string = QString::fromStdString(temp);
// std::istringstream s(temp);
// s >> sheethConstant;
v = t_string.toDouble();//atof(mystring);
static_variable = v;
}
fclose (pFile);
}
如果十进制分隔符是逗号,则必须使用区域设置进行处理 由于您使用的是Qt,因此可以设置
QLocale
对象并设置使用逗号的区域设置(我只选择了一个有效的区域设置,它并不特定于您的情况)
#包括
#包括
int main(int argc,char*argv[]){
QString t_字符串(“004019173434”);
QLocale语言环境(QLocale::Catalan);
double number=locale.toDouble(t_字符串);
qDebug()QString的值是多少?std::stod(“1234.56”)
。您还必须包括一些Qt头以及上面提到的那些。我还包括了QString,我还尝试了std::stod和strtod。文件中的值是004019173434004019173434
除非您设置了适当的区域设置,否则将无法转换,我相信我不知道如何使用进行转换>QString
。很高兴知道这一点。为了将来的参考,请在问题中指定逗号,而不仅仅是在注释中。
#include <QDebug>
#include <QLocale>
int main(int argc, char *argv[]) {
QString t_string("0,04019173434");
QLocale locale(QLocale::Catalan);
double number = locale.toDouble(t_string);
qDebug() << "String is" << t_string << ", number is " << number;
return 0;
}