2017-03-05 79 views
0

我有一个x和y坐标的数据文件,我试图将它们读入Qt中的两个双向量。我的问题是,价值被切断或后3位小数四舍五入,即使我的原始值上升到6我的数据文件看起来像从文本文件中读取值而不会损失Qt中的精度

35.659569 139.723370 
35.659546 139.723194 
35.659527 139.723051 
35.659523 139.722909 
35.659383 139.722946 

我的代码是

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

我如何读取数值而不会失去精度?

+1

它似乎不读,但打印问题。还要注意,由于小数和二进制分数的差异,某些错误是不可避免的。阅读并存储为字符串以避免丢失精度。 – MikeCAT

+0

你确定他们正在被切断,还是只是被显示为圆形? qDebug(),qInfo()可以使用格式化标志来控制它们的打印方式。设置一个中断点,并查看堆栈的内容“a”和“b”。我相信你会看到你的全部价值。 – Freddy

回答

1

你不会失去精度。问题出在。尝试使用qSetRealNumberPrecision()

替换该行设置精度:

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

有:

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