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);
相关推荐
Gauss松鼠会4 小时前
GaussDB 中 gsql 与 DBeaver(JDBC)客户端工具查询时间不一致:原因、排查与处理
运维·服务器·数据库·sql·gaussdb·经验总结
Elastic 中国社区官方博客4 小时前
基于 Jina OCR v1 与 Elasticsearch 的 PDF 智能混合检索与 RAG 系统实战指南
大数据·数据库·elasticsearch·搜索引擎·ocr·jina
楚识科技4 小时前
信创环境下 OCR 部署实践:从麒麟系统到达梦数据库的全栈适配
数据库·ocr
飞浪纪元[FWC–FE]4 小时前
Qt 构建排错实录:从 MSB 1009 到生成器选型
开发语言·数据库·qt
Paper数据分析-经管学术4 小时前
1985-2026年中国低空经济专利明细数据库
数据库
RuoyiOffice4 小时前
SpringBoot3 + openGauss:RuoYi Office 登录、流程发布与用印填报适配实战
java·数据库·spring boot·opengauss·信创
画中有画4 小时前
时序数据库在物联网系统中的应用
数据库·物联网·时序数据库
Decay__10 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
小徐不徐说15 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
小王C语言15 小时前
Qt常用控件:容器类控件,标题分组框、标签页(浏览器标签)
开发语言·qt