问题描述

在下面的例子中,变量a减去一个常量,本该值为0.90,但是通过程序得到a的值0.8999999999,例子如下:

qreal a = 0.95;
a = a - 0.05;

不光是做减法的时候会出现这样的问题,还有做乘法的时候也会出现这样的问题,例子如下:

qreal a = 1.15;
int b = a * 100;

本该a乘以100 后得到的b的值应该为115,然后程序得到的是114。

原因

网上找到的答案是计算机内部需要将小数后的位数转换为二进制,在这个过程中存在精度的丢失。(大体是这样,时间原因未深究)

解决方法

初步采用字符串转换的方式,但似乎并没有完全解决。

  //将m_scale四舍五入取2位QString str = QString::asprintf("%.2f",a);a = str.toDouble();

在采用字符串这样转换的情况下,只是解决了上述相减导致的值不正确的现象。求相乘时如何解决精度丢失。
对于上述两个现象,希望得到正确的数值,望大牛不吝赐教。
后续已经跟进解决,上面对于qreal类型变量与100相乘得到整数,故而无法将最后的正确数值得到,究其原因是因为定义的变量不应该是int型的变量来接收两者相乘的数值,而应该定义未qreal类型。下面上代码:
原来的写法是:

int ratio = m_scale * 100;
if(ratio == 114)//只是简单解决精度丢失254 229 204
{ratio = 115;
}
else if(ratio == 204)
{ratio = 205;
}
else if(ratio == 229)
{ratio = 230;
}
else if(ratio == 254)
{ratio = 255;
}

改进之后的写法:

   qreal ratio = m_scale * 100;//将m_scale四舍五入取2位解决精度丢失2021-3-18QString str = QString::asprintf("%.2f",ratio);ratio = str.toDouble();

按照上述的方式可以解决精度丢失问题。

求qt如何解决小数计算过程中的精度丢失相关推荐

  1. 浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源

    在知乎上上看到如下问题: 浮点数精度问题的前世今生? 1.该问题出现的原因 ? 2.为何其他编程语言,比如java中可能没有js那么明显 3.大家在项目中踩过浮点数精度的坑? 4.最后采用哪些方案规避 ...

  2. python 浮点数精度丢失_浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源...

    浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源 无论在java python javaScript里面都存在 1+ 2!== 3 问题,这个问题的产生根源在于计算存储数字是二进制,对无限循环小 ...

  3. c# 取余数 浮点数_浮点数精度问题透析:小数计算不准确+浮点数精度丢失根源

    在知乎上上看到如下问题: 浮点数精度问题的前世今生? 1.该问题出现的原因 ? 2.为何其他编程语言,比如java中可能没有js那么明显 3.大家在项目中踩过浮点数精度的坑? 4.最后采用哪些方案规避 ...

  4. python吃显卡还是内存不足_解决pytorch GPU 计算过程中出现内存耗尽的问题

    Pytorch GPU运算过程中会出现:"cuda runtime error(2): out of memory"这样的错误.通常,这种错误是由于在循环中使用全局变量当做累加器, ...

  5. 哈佛大学联合团队新突破:在计算过程中实现量子纠错

    实验室成员:左起依次为Dolev Bluvstein.Harry Levine(视频成员).Sepehr Ebadi.Mikhail Lukin (图片来源:哈佛大学) 试想一下,一边飞行一边制造飞机 ...

  6. Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题

    Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题 参考文章: (1)Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题 (2)http ...

  7. 解决Linux安装过程中不能安装Grub的问题

    参考,部分转载和万分感谢:解决Linux安装过程中不能安装Grub的问题 关卡1: 从前段时间折腾了很久,刚开始是因为/boot区已经占满了,那么为什么会占满呢?因为当时尝试初次手动分区,然后参考了网 ...

  8. 栈在表达式计算过程中的应用

    栈在表达式计算过程中的应用 :建立操作数栈和运算符栈.运算符有优先级. 规则: 自左至右扫描表达式,凡是遇到操作数一律进操作数栈. 当遇到运算符时,如果它的优先级比运算符栈栈顶元素的优先级高就进栈.反 ...

  9. u盘装linux镜像是dvd吗,使用U盘刻录镜像及解决在安装过程中找不到光盘的问题...

    一.使用U盘刻录镜像 1.安装之后我们打开软件,点击文件打开,找到我们刚才进行下载的Ubuntu的ISO文件,然后点击打开,完成ISO文件的加载.接着我们插入U盘,点击UltraISO启动选项,然后找 ...

最新文章

  1. 网页中 哪些是 GET 请求,哪些是 POST 请求
  2. qu.la网站上的小说爬取
  3. PHP Ajax 跨域问题最佳解决方案
  4. [js高手之路]原型对象(prototype)与原型链相关属性与方法详解
  5. mac环境mongodb安装与配置
  6. pytest-allure测试报告
  7. CSRF 攻击的应对之道
  8. C#里如何使用Timespan(计算时间差)
  9. shell习题第22题:
  10. 测试自动化金字塔在软件开发中是如何使用的?
  11. BZOJ 2199: [Usaco2011 Jan]奶牛议会 [2-SAT 判断解]
  12. TensorFlow学习笔记--第一节 hello TensorFlow
  13. QT编译静态库与动态库
  14. socket:read: Connection reset by peer
  15. PHP编程 第3版pdf
  16. wamp5如何配置多个自定义域名访问本地不同的项目
  17. Windows 无法使用内置管理员账户打开IE
  18. 在javascript中如何实现珠峰海拔8848米,现在有足够大的纸,厚度是0.01米,折多少次高度可以超过珠穆朗玛峰
  19. 关闭微信朋友圈和公众号的广告
  20. imac mini 双系统_iMac,Mini和Pro:Apple的台式Mac比较

热门文章

  1. 唯品会:在 Flink 容器化与平台化上的建设实践
  2. Kubernetes 是一个“数据库”吗?
  3. 年度回顾 | 2019 年的 Apache Flink
  4. AutoScaling 成本优化模式升级--混合实例策略
  5. 如何“神还原”数据中心? 阿里联合NTU打造了工业级精度的仿真沙盘!
  6. 最佳实践:使用负载均衡SLB IPv6搞定苹果AppStore审核
  7. Parallels 发布 Desktop 17版本,支持 Windows 11 和 macOS Monterey
  8. 报名倒计时 | 「TeaTalk」技术沙龙成都站再来袭!
  9. 无法恢复,欧洲云服务巨头数据中心起火
  10. 不看就亏系列!这里有完整的 Hadoop 集群搭建教程,和最易懂的 Hadoop 概念!| 附代码...