Qt 将QString 转换成 double类型的 哪里不对了?为什么是科学计数法

QStringnum="1234567890"qDebug()<<num.toDouble();为什么输出的结果是用科学计数法来表示的,大于六位数字的都是用科学计数法表示... QString num = "1234567890"

qDebug()<<num.toDouble();
为什么输出的结果是用科学计数法来表示的,大于六位数字的都是用科学计数法表示的 这个该怎么处理?
以前也用过类似的 可是不知道为什么没有出现这种情况。
展开
 我来答
mayadong7349
2014-07-15 · TA获得超过2356个赞
知道大有可为答主
回答量:362
采纳率:0%
帮助的人:676万
展开全部

方法一:

使用QTextStream头文件中提供的manipulators:

#include <QtCore/QTextStream>
QString num("1234567890");
double d = num.toDouble();
qDebug() << fixed << qSetRealNumberPrecision(0) << d << endl;

这里,使用了QTextStream中三个全局操纵符(类似于C++标准库中的那些操纵符),fixed表示以非科学记数法形式输出,qSetRealNumberPrecision
设置精确到小数点后几位,endl(这里的endl不是std::endl)表示一个换行。

方法二:

qDebug() << QString::number(d, 'f', 0);

更多追问追答
追问
我最终要得到的数值是要参加运算的,所以只能是double类型的,方法二得到的是QString类型的吧。方法一也一样,不是double类型的,请问怎么得到double类型的呢?
追答
我本来以为你是想问:怎么以非科学记数法输出浮点数,所以才这样答。

你调用toDouble得到的就已经是double类型了。double类型的底层存储形式和使用qDebug()输出的形式关系并不大。

使用toDouble转换成double后,你可以以任意形式打印输出它。但并不是说,“某个浮点数是以指数形式打印输出的”就能得出“这个数据底层就是以指数形式存储”这样的结论。

任何双精度类型的浮点数,其底层存储形式都是一样的(搜索:IEEE floating point)。只是在打印的时候,为了便于你阅读,qDebug会用指数形式打印比较大的数/或者非常小的数。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式