CHEARV 发表于 2013-4-6 16:37:20

4172.27 - 4104.17相减得到的结果有误是怎么回事?

$f = 4172.27 - 4104.17
MsgBox(0, '', '4172.27 - 4104.17 = ' & $f)

运行上面这两句代码,我发现结果不对,后面多了好多个小数。

这是怎么回事啊?换了几个版本 3.3.6.1   3.3.9.4 都是一样的。

kevinch 发表于 2013-4-6 17:16:06

浮点数精度问题,很正常的

sniperone 发表于 2013-4-6 17:39:51

学习,赚点小费~

CHEARV 发表于 2013-4-6 18:10:32

浮点数精度问题,很正常的
kevinch 发表于 2013-4-6 17:16 http://www.autoitx.com/images/common/back.gif

那这个有什么办法解决吗?修改精度,还是只能这样?

kevinch 发表于 2013-4-6 20:42:03

我能想到的就是避开浮点数$f = 4172.27 - 4104.17
MsgBox(0, '', '4172.27 - 4104.17 = ' & $f)
$f=417227-410417
MsgBox(0,"",'4172.27 - 4104.17 = ' & $f/100)

LawrenceDon 发表于 2013-4-6 22:48:43

我一般会做这样的处理。$f = 4172.27 - 4104.16
MsgBox(0, '', '4172.27 - 4104.17 = ' & StringFormat("%0.2f",$f))

h20040606 发表于 2013-4-7 06:09:51

一般的语言中,浮点数运算都是这样子的,没有办法的

CHEARV 发表于 2013-4-7 23:05:19

回复 5# kevinch


   呵呵,不是每个小数相减都会出现这样的错误啊。但你这个办法也算是折中的办法吧,我先试试,谢谢。

mbdnmt 发表于 2013-4-8 00:25:29

这样$f = (417227- 410417) / 100
MsgBox(0, '', '4172.27 - 4104.17 = ' & $f)或者$f = 4172.27 - 4104.16
MsgBox(0, '', '4172.27 - 4104.17 = ' & StringFormat("%0.2f",$f))

netegg 发表于 2013-4-8 05:26:23

大数运算就完了,如果对二进制熟悉的话转成二进制计算

PPTBS 发表于 2013-4-12 20:31:47

回复 10# netegg


    麻烦给一段指导的源码

haijie1223 发表于 2013-4-12 23:13:56

用Round指定位数

netegg 发表于 2013-4-13 21:41:26

exe帮助里我加到math库里了,不再给了
页: [1]
查看完整版本: 4172.27 - 4104.17相减得到的结果有误是怎么回事?