2017-02-15 18 views
1

バイナリファイルから倍精度浮動小数点数を読み込み、静的double変数に代入しようとしています。私は数多くのメソッドを試しましたが、メソッドに関係なく変換の結果は0です。ファイルから数値を正しく読み込みます(文字の配列として)。ただし、変換しようとすると何かが発生します。 :#<文字列が含まれる>#が含ま< sstream提供>の#include < stdlib.h>に含ま文字列を変換するallways 0

メソッドのコードスニペットは、怒鳴る与えられる:

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); 
} 
+0

QStringの値は何ですか? – Jepessen

+1

'std :: stod(" 1234.56 ")'。 – Chad

+0

また、Qtヘッダーだけでなく、上記のものも含める必要があります。 – Steve

答えて

2

小数点の記号は、あなたがして処理しなければならないコンマがある場合ロケール。

Qtを使用しているので、QLocaleオブジェクトを設定し、カンマを使用するロケールを設定することができます(これは動作するものだけを取ります。

#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; 
} 
+0

ありがとうございました!あなたのアイデアはトリックでした。 –

+0

それを知ってよかったです。将来の参照のために、コメントだけでなく、あなたの質問にカンマを指定してください。 – Jepessen