• 8605阅读
  • 5回复

[提问]QString的toDouble方法自动舍入的问题 [复制链接]

上一主题 下一主题
离线nickyxu
 
只看楼主 正序阅读 楼主  发表于: 2012-04-16
关键词: 求助
各位,
       刚入门Qt,今天在由QString转double型变量时,发生了如下的状况。

  QRegExp rx("Extent:\\s\\((\\d*\\.\\d+),\\s(\\d*\\.\\d+)\\)\\s-\\s\\((\\d*\\.\\d+),\\s(\\d*\\.\\d+)\\)");

if(rx.indexIn(strLine) != -1)
{

            minX = (rx.cap(1)).toDouble();            minY = (rx.cap(2)).toDouble();            maxX = (rx.cap(3)).toDouble();            maxY = (rx.cap(4)).toDouble();
                  break;}
发现转换后的数值不对。
我的原始数据格式为:
Extent: (514928.735645, 4314653.628277) - (561806.252329, 4334507.899861)
而得到的结果值为:
514929 4.31465e+06 561806 4.33451e+06

另外,我自己测试了一个变量
qDebug()<<QString("1.234567890").toDouble();
输出结果为: 1.23457
这显然也是不对的。
比如说,我输入的是1.234567890,我期望的结果就该为1.234567890

请各位帮忙!
多谢!

离线淳于半邪

只看该作者 5楼 发表于: 2012-04-16
回 3楼(nickyxu) 的帖子
qDebug确实只取了5位,刚刚我调试了下,toDouble() 小数点后面其实是保持了16位的
离线nickyxu
只看该作者 4楼 发表于: 2012-04-16
回 1楼(dbzhang800) 的帖子
是有点乱。

你提到的,我刚刚试过了,数值是正确的。

那你的意思就是qDebug自动对我的原始值做了舍入的处理????



不管怎么说,证实了QString.toDouble方法是没有问题的,多谢!
离线nickyxu
只看该作者 3楼 发表于: 2012-04-16
回 2楼(淳于半邪) 的帖子
有这说法????float型的似乎小吧?
离线淳于半邪

只看该作者 2楼 发表于: 2012-04-16
toDouble() 小数点后面最多保留5位吧
离线dbzhang800

只看该作者 1楼 发表于: 2012-04-16
呵呵,不过你这儿所有内容都无法证实你 提到的问题。

题外:你的测试方法存在问题

或许你可以试试这样写:

qDebug()<<(QString("1.234567890").toDouble() - 1.2345678);
快速回复
限100 字节
 
上一个 下一个