2017-03-05 12 views
0

私はx座標とy座標のデータファイルを持っています。それらをQtの2つのダブルベクトルに読み込もうとしています。私の問題は私の元の値は、私のコードはQtで精度を失うことなくテキストファイルから値を読み取る

QVector<double> v, v2; 
QFile textFile (":/new/files/02262017newdata.txt"); 
if(textFile.open(QIODevice::ReadOnly)) 
{ 
    qInfo() << "opened file successfully"; 
    double a, b; 
    QTextStream textStream (&textFile); 
    while (!textStream.atEnd()) { 
     QString line = textFile.readLine(); 
     QStringList list = line.split(" "); 
     if(list.size() == 2){ 
     a = list.at(0).toDouble(); 
     b = list.at(1).toDouble(); 
     } 
     qInfo() << "a and b after using split is" << a <<" "<< b; 
     v.append(a); 
     v2.append(b); 
    } 
} 

ある

35.659569 139.723370 
35.659546 139.723194 
35.659527 139.723051 
35.659523 139.722909 
35.659383 139.722946 

のように私のデータファイルが見える6に上がるにもかかわらず、値がカットオフまたは3つの小数点以下四捨五入されていることです精度を損なうことなく値を読み取るにはどうすればよいですか?

+1

:で

qInfo() << "a and b after using split is" << a <<" "<< b; 

:この行を置き換えqSetRealNumberPrecision()

を使用しての精度を設定してみてください。また、小数部と2進小数部の違いにより、ある種のエラーは回避できないことに注意してください。精度の低下を避けるために、文字列として読み込んで格納します。 – MikeCAT

+0

あなたは彼らが切り離されていると確信しているのですか、まさに丸みを帯びて表示されていますか? qDebug()、qInfo()は、印刷方法を制御する書式設定フラグを持つことができます。ブレークポイントを入れ、 'a'と' b'のスタックの内容を見直してください。私はあなたがあなたの完全な価値観を見ると信じています。 – Freddy

答えて

1

精度を失うことはありません。問題はです。それは読んではなく、問題を印刷していないようだ

qInfo() << "a and b after using split is"<< qSetRealNumberPrecision(8) << a <<" "<< b;