TC官方合作论坛

 找回密码
 立即注册
查看: 1034|回复: 4
打印 上一主题 下一主题

[已解决] 两数相减得不到想要的数值

[复制链接]
跳转到指定楼层
楼主
发表于 2014-7-4 19:38:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 15020374123 于 2014-7-4 20:16 编辑

数值 = 类型.转浮点型(当前价位) - 类型.转浮点型(最新价位)
为什么3.915-3.914=9.999999
          3.915-3.913=2.*******
          3.915-3.912=3.********
          3.915-3.911却=0.004
两数相减得不到想要的数值    请老师帮忙下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

5#
发表于 2014-7-7 03:17:21 | 只看该作者
其实.....你的问题很正常, 这一切都跟浮点数在内存中的存储方式有关.
学过C/C++的同学应该知道, 浮点数在内存中是以二进制补码的形式存储
打个比方, 32位存储单元, 必须把32个单元都填满0或1
在这种情况下, 浮点数往往都是存储的近似值.
所以浮点数之间的算术运算, 就会出现误差.....
比如上面的运算结束就是这样:

3.915 - 3.914 = 9.9999999999989E-04
3.915 - 3.913 = 2.00000000000022E-03
3.915 - 3.912 = 3.00000000000011E-03

看清楚结果后面的E-04之类的数, 科学计数法还记得不?
其实实际的值是这样:

0.00099999999999989 近似于:0.001
0.00200000000000022 近似于:0.002
0.00300000000000011 近似于:0.003

至于3.915 - 3.911 = 0.004, 记得刚才说的往往吗?

反码\补码之类的知识, 有兴趣可以到网上查查, 这里就知道是这么回事就好了.

回到你要的结果, 你可以变通处理一下, 都乘以1000, 变成整数再运算....

a = 3.915
b = 3.913
运算结果 = (a * 1000) - (b * 1000) / 1000

是不是情况不一样了?

--------打这么多字,累死了, 快采纳吧!!
回复 支持 反对

使用道具 举报

沙发
发表于 2014-7-4 21:54:43 | 只看该作者
不转型试试!
回复 支持 反对

使用道具 举报

板凳
发表于 2014-7-5 09:07:32 | 只看该作者
不用类型转换 直接运算试试
回复 支持 反对

使用道具 举报

地板
 楼主| 发表于 2014-7-5 15:17:38 | 只看该作者

一样  不转型也是一样的结果
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18043773号

GMT+8, 2025-9-26 11:00 , Processed in 0.172388 second(s), 24 queries .

Powered by 海安天坑软件科技有限公司

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表