• 7600阅读
  • 4回复

[提问]关于QString的 todouble() [复制链接]

上一主题 下一主题
 

只看楼主 倒序阅读 楼主  发表于: 2014-03-24
我有一个QString a = 799999.12;转换成Double 时就变成了799999.11,
这是为什么?
在线等,谢谢!
离线realfan

只看该作者 1楼 发表于: 2014-03-24
小数在计算机中,很多是不能完全精确表示的,
可能差0.0000.....1或几
但不会明显的从.12变成.11,也许会是.1199999999......
就你说的情况,试了一下,没有.12变.11的问题

只看该作者 2楼 发表于: 2014-03-24
回 realfan 的帖子
realfan:小数在计算机中,很多是不能完全精确表示的,
可能差0.0000.....1或几
但不会明显的从.12变成.11,也许会是.1199999999......
就你说的情况,试了一下,没有.12变.11的问题
[图片] (2014-03-24 14:22) 

刚看到不是这个的问题,就是这部分是对的,转换成QString之后当modbus请求帧发送时出的错。但是新的问题又出现了
这个值得范围是-79999999~79999999,当输入79999989.01时,数据就出错了
离线彩阳

只看该作者 3楼 发表于: 2014-03-24
单双精度型的精度是有限的,也就是说有效位数是有限的,我想可能是这个原因。
上海Qt开发联盟,热忱地欢迎你的加入!
在线XChinux

只看该作者 4楼 发表于: 2014-03-26
用GMP库做精确计算吧。在代码秀区找mpmath
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个