TC官方合作论坛

标题: 两数相减得不到想要的数值 [打印本页]

作者: 15020374123    时间: 2014-7-4 19:38
标题: 两数相减得不到想要的数值
本帖最后由 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
两数相减得不到想要的数值    请老师帮忙下


作者: xiaok018    时间: 2014-7-4 21:54
不转型试试!
作者: q273814    时间: 2014-7-5 09:07
不用类型转换 直接运算试试
作者: 15020374123    时间: 2014-7-5 15:17
xiaok018 发表于 2014-7-4 21:54
不转型试试!

一样  不转型也是一样的结果
作者: julele    时间: 2014-7-7 03:17
其实.....你的问题很正常, 这一切都跟浮点数在内存中的存储方式有关.
学过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

是不是情况不一样了?

--------打这么多字,累死了, 快采纳吧!!





欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1