afan
发表于 2015-3-20 10:44:29
按需求来吧,一般情况下无此需求,需要计算大数就直接用字符串形式计算。或者,函数定义时增加一个大数计算开关参数,调用时以字符串形式代入。
vuivui
发表于 2015-3-20 11:15:24
按需求来吧,一般情况下无此需求,需要计算大数就直接用字符串形式计算。或者,函数定义时增加一个大数计算 ...
afan 发表于 2015-3-20 10:44 http://www.autoitx.com/images/common/back.gif
在au3字符串计算是自动辨认转换为数字类型进行计算的,大数字可以用指数表述(科学计数法),财务上就是加大单位,比如用万元、亿元为单位。
基本函数、运算量大的数字计算尽量避免字符串参与,效率下降很严重,而且要考虑到很多出错情况。
vuivui
发表于 2015-3-20 11:33:48
字符串实际上是一个数组,字符串、数字互相转换运算量挺大的,只是我们一般都是简单编程感觉不出来,稍为复杂的数字运算和加密运算,我都是用c编的。
涉及财务、加密的编程,慎用au3。
vuivui
发表于 2015-3-20 11:36:07
au3的主要功能是界面操作的自动化。
netegg
发表于 2015-3-20 12:34:35
本帖最后由 netegg 于 2015-3-20 12:36 编辑
拙见,什么样的工具能干什么活,目的能否实现不是工具的事而是使用者的事,尽可能发挥就行了,工具本身的局限性和使用者貌似关系不大,再好的思路,工具不支持,谁也没办法,c++好像也无法算无限大的数
vuivui
发表于 2015-3-20 13:51:28
拙见,什么样的工具能干什么活,目的能否实现不是工具的事而是使用者的事,尽可能发挥就行了,工具本身的局 ...
netegg 发表于 2015-3-20 12:34 http://www.autoitx.com/images/common/back.gif
c++当然无法处理无限大的数字,大数字无法表述时采用的近似值。
比如:1.23456789*10^n,取近似值为1.234568*10^n,一般场合相差是不大的,关键要求的精度是多少。像圆周率一般取3.14近似值。
上面我已经说过,数值大的一般是用改变单位的方法,天文计算用标准单位米那得多大的数字,少几个0多几个0会有感觉吗?用光年作为单位就方便多了。
另外,无穷大的数,有另外的表述方法,那就是极限,都是能计算的,微积分就是干这些活的。
vuivui
发表于 2015-3-20 13:58:57
那么写程序就一定要严谨,这是个大问题,
如果写个程序只能在特定条件的电脑上运行结果才准确,那等于说没用,不如不写
邪恶海盗 发表于 2015-3-20 10:28 http://www.autoitx.com/images/common/back.gif
是的编程兼容性是很重要的,但是兼容性越好,程序体积就越大,性能就越差。
有时是做不到的,64位程序无法在32位系统运行的,如果在64位系统用32程序,就无法体现64性能。
netegg
发表于 2015-3-20 14:01:34
无限大是处理不了,不过可以到10^4038,忘了是32位还是64位的了
lxwlxwayy
发表于 2015-3-21 16:32:33
帮你顶{:face (427):}
netegg
发表于 2015-3-23 12:54:05
回复 37# vuivui
不好意思,重新看了,win api(还不完全是c)里的定义,对数字长度的要求根据不同类型,不同系统,是不一样的,实在是不好意思,别见怪,只是讨论而已
netegg
发表于 2015-3-23 16:15:09
本帖最后由 netegg 于 2015-3-23 16:16 编辑
回复 37# vuivui
测试过了,即使用api,也就能保留16位,不好意思,我确实不会c,别介意
vuivui
发表于 2015-3-25 10:10:40
在c语言数据长度跟系统位数相关,int类型数据位数一般是系统的最高位数,不同的c语言也是有区别的。
netegg
发表于 2015-3-25 13:05:04
回复 42# vuivui
多谢解释
zhouhaijin
发表于 2015-3-27 10:17:49
MsgBox(0,'',10.5 - 10.4)
也算的不准
Round 结果有时候会= -1.$有时候又不会
我相同的写法,在大点的程序里不编译不会等于-1.$编译后就等于-1.$
就单单测试Round又不会出错,代码数值跟那程序完全一样。
vuivui
发表于 2015-3-27 12:19:03
也算的不准
Round 结果有时候会= -1.$有时候又不会
我相同的写法,在大点的程序里不编译不会等于-1.$ ...
zhouhaijin 发表于 2015-3-27 10:17 http://www.autoitx.com/images/common/back.gif
au3二进制和十进制计算转换修正不严谨,诸如此类的问题很多,所以财务等需准确数值的运算慎用au3。
小数、指数十进制转换到二进制是个近似值,二进制转换到十进制保留多位小数按理说应该更准确,所以在界面操作诸如窗口位置、大小等计算中是没问题的。
在需有精确数据的场合,办法是单位取大,避免出现小数,因为整数二进制和十进制转换在取值范围内是正确的。比如先乘以100、1000,在最后结果除以100、1000。碰到除数、指数计算出现小数,四舍五入的时机,要跟相关excel等协同处理的软件算法想统一。
简单的方法还是用c编个dll结合au3,c普通计算编程很容易的。不想学c,就用excel结合vba或au3编程,其他很多财务软件都带有编程功能的。
au3是好东西,也不要因为数字计算等问题,就怕用au3。我原来用vb较多,现在基本不用了,c是au3的母语言,就是不学,还是要了解一下的,同在流行的编程语言大多数是类c语言,对转学其他语言好处也很大。pc编程对业余爱好者来说,一般场合用au3对付是较好的选择。