QString设置小数点精度位数

QString设置小数点精度位数

  • [Chapter1 QString设置小数点精度位数](#Chapter1 QString设置小数点精度位数)
  • [Chapter2 Qt中QString.toDouble有效位数6位问题以及数据小数点有效位数的处理](#Chapter2 Qt中QString.toDouble有效位数6位问题以及数据小数点有效位数的处理)
  • [Chapter3 qt QString转Double只显示6位数字的问题(精度丢失)](#Chapter3 qt QString转Double只显示6位数字的问题(精度丢失))

QString 转double,double转QString 中的小数点问题

Chapter1 QString设置小数点精度位数

原文链接:https://blog.csdn.net/xxzhaoming/article/details/130364751

在Qt中,我们可以使用QString::number()函数将float类型转换为QString类型以便在界面上显示。该函数默认显示6位小数,但我们也可以通过设置第二个参数来控制小数点位数。

以下是示例代码,将float类型的变量num转换为QString类型,保留2位小数:

cpp 复制代码
float num = 3.1415926;
QString str = QString::number(num, 'f', 2);

在上面的代码中,参数'f'表示将数值格式化为浮点数,2表示保留2位小数。

Chapter2 Qt中QString.toDouble有效位数6位问题以及数据小数点有效位数的处理

原文链接:https://blog.csdn.net/nichimgp/article/details/129301059

问题一:QString.toDouble有效位只有6位

cpp 复制代码
  QString sVal="1234.5678";
  double dVal=sVal.toDouble();
  qDebug()<<"字符串转 double:"<<<<dVal<<endl; //输出结果:1234.57 此处Qt打印输出只会保留6位数字
  qDebug()<<"字符串转 double:"<<qSetRealNumberPrecision(10)<<dVal<<endl;//输出结果为1234.5678
 
//但假如让dVal写入数据库(QSqlite),写入的值仍是1234.57,有说法是因为对数据库来说,所有的数据都是打印的字符文本,所以会按照默认打印结果保存。
//有开发需求,尤其是精度需求,保险还是用String来保存。反正从数据库中拿到的任何数据都可以直接toString()/toDouble()

问题二:小数点有效位数的问题

Qt的浮点数计算,四舍五入保留都比较麻烦。尤其是int 1234567想转为double 123.4567。因为Qt又默认只保存前6位,所以数据就是123.457。所以对精度要求高的话,就不要直接1234567/10000.用除法。可以用字符串拼接的方法:

cpp 复制代码
  //需求:保留4位小数
    //Index是要除以10000转double的值
    quint32 Integer=Index/10000;
    quint32 decimal=Index%10000;
    QString sVal=QString("%1.%2").arg(Integer).arg(decimal);
   //此处会有新问题,假如index%1000=567,那么数据就是123.567 此处真实值应该是123.0567)
   //下面可以解决:
    QString sVal=QString("%1.%2").arg(Integer).arg(decimal,4, 10, QLatin1Char('0'));//前位补0
   //4-小数点有效位数 10-进制 前位补0

Chapter3 qt QString转Double只显示6位数字的问题(精度丢失)

QString使用toDoouble转化double类型,其实精度没有丢失,只是我们使用qDebug打印时出了问题。qDebug它对于double类型只显示6位数字。

如果想要打印所以数字,方法如下:

cpp 复制代码
QString val = 123.456789;
qDebug()<<qSetRealNumberPrecision(10)<<val.toDouble();

且double转QString精度丢失解决方法:

cpp 复制代码
double num = 123.0456789;
QString val = QString::number(num,'f',8);
相关推荐
难以触及的高度28 分钟前
mysql中between and怎么用
数据库·mysql
Jacky(易小天)42 分钟前
MongoDB比较查询操作符中英对照表及实例详解
数据库·mongodb·typescript·比较操作符
Karoku0661 小时前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
徐霞客3202 小时前
Qt入门1——认识Qt的几个常用头文件和常用函数
开发语言·c++·笔记·qt
小技与小术3 小时前
数据库表设计范式
数据库·mysql
安迁岚3 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
安迁岚3 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器
数据库·sql·mysql·oracle·实验报告
Loganer3 小时前
MongoDB分片集群搭建
数据库·mongodb
LKID体3 小时前
Python操作neo4j库py2neo使用之创建和查询(二)
数据库·python·neo4j
姆路3 小时前
QT Designer内存飙升
qt