Qt 将QString 转换成 double类型的 哪里不对了?为什么是科学计数法
QStringnum="1234567890"qDebug()<<num.toDouble();为什么输出的结果是用科学计数法来表示的,大于六位数字的都是用科学计数法表示...
QString num = "1234567890"
qDebug()<<num.toDouble();
为什么输出的结果是用科学计数法来表示的,大于六位数字的都是用科学计数法表示的 这个该怎么处理?
以前也用过类似的 可是不知道为什么没有出现这种情况。 展开
qDebug()<<num.toDouble();
为什么输出的结果是用科学计数法来表示的,大于六位数字的都是用科学计数法表示的 这个该怎么处理?
以前也用过类似的 可是不知道为什么没有出现这种情况。 展开
1个回答
展开全部
方法一:
使用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会用指数形式打印比较大的数/或者非常小的数。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询