找回密码
 加入
搜索
楼主: vuivui

[AU3基础] 关于Floor、Ceiling、Round函数出错的问题

 火... [复制链接]
发表于 2015-3-20 10:44:29 | 显示全部楼层
按需求来吧,一般情况下无此需求,需要计算大数就直接用字符串形式计算。或者,函数定义时增加一个大数计算开关参数,调用时以字符串形式代入。
 楼主| 发表于 2015-3-20 11:15:24 | 显示全部楼层
按需求来吧,一般情况下无此需求,需要计算大数就直接用字符串形式计算。或者,函数定义时增加一个大数计算 ...
afan 发表于 2015-3-20 10:44



在au3字符串计算是自动辨认转换为数字类型进行计算的,大数字可以用指数表述(科学计数法),财务上就是加大单位,比如用万元、亿元为单位。

基本函数、运算量大的数字计算尽量避免字符串参与,效率下降很严重,而且要考虑到很多出错情况。
 楼主| 发表于 2015-3-20 11:33:48 | 显示全部楼层
字符串实际上是一个数组,字符串、数字互相转换运算量挺大的,只是我们一般都是简单编程感觉不出来,稍为复杂的数字运算和加密运算,我都是用c编的。

涉及财务、加密的编程,慎用au3。
 楼主| 发表于 2015-3-20 11:36:07 | 显示全部楼层
au3的主要功能是界面操作的自动化。
发表于 2015-3-20 12:34:35 | 显示全部楼层
本帖最后由 netegg 于 2015-3-20 12:36 编辑

拙见,什么样的工具能干什么活,目的能否实现不是工具的事而是使用者的事,尽可能发挥就行了,工具本身的局限性和使用者貌似关系不大,再好的思路,工具不支持,谁也没办法,c++好像也无法算无限大的数
 楼主| 发表于 2015-3-20 13:51:28 | 显示全部楼层
拙见,什么样的工具能干什么活,目的能否实现不是工具的事而是使用者的事,尽可能发挥就行了,工具本身的局 ...
netegg 发表于 2015-3-20 12:34



c++当然无法处理无限大的数字,大数字无法表述时采用的近似值。

比如:1.23456789*10^n,取近似值为1.234568*10^n,一般场合相差是不大的,关键要求的精度是多少。像圆周率一般取3.14近似值。

上面我已经说过,数值大的一般是用改变单位的方法,天文计算用标准单位米那得多大的数字,少几个0多几个0会有感觉吗?用光年作为单位就方便多了。

另外,无穷大的数,有另外的表述方法,那就是极限,都是能计算的,微积分就是干这些活的。
 楼主| 发表于 2015-3-20 13:58:57 | 显示全部楼层
那么写程序就一定要严谨,这是个大问题,
如果写个程序只能在特定条件的电脑上运行结果才准确,那等于说没用,不如不写
邪恶海盗 发表于 2015-3-20 10:28



是的编程兼容性是很重要的,但是兼容性越好,程序体积就越大,性能就越差。
有时是做不到的,64位程序无法在32位系统运行的,如果在64位系统用32程序,就无法体现64性能。
发表于 2015-3-20 14:01:34 | 显示全部楼层
无限大是处理不了,不过可以到10^4038,忘了是32位还是64位的了
发表于 2015-3-21 16:32:33 | 显示全部楼层
帮你顶
发表于 2015-3-23 12:54:05 | 显示全部楼层
回复 37# vuivui
不好意思,重新看了,win api(还不完全是c)里的定义,对数字长度的要求根据不同类型,不同系统,是不一样的,实在是不好意思,别见怪,只是讨论而已
发表于 2015-3-23 16:15:09 | 显示全部楼层
本帖最后由 netegg 于 2015-3-23 16:16 编辑

回复 37# vuivui
测试过了,即使用api,也就能保留16位,不好意思,我确实不会c,别介意
 楼主| 发表于 2015-3-25 10:10:40 | 显示全部楼层
在c语言数据长度跟系统位数相关,int类型数据位数一般是系统的最高位数,不同的c语言也是有区别的。
发表于 2015-3-25 13:05:04 | 显示全部楼层
回复 42# vuivui

多谢解释
发表于 2015-3-27 10:17:49 | 显示全部楼层
MsgBox(0,'',10.5 - 10.4)

也算的不准
Round 结果有时候会= -1.$  有时候又不会
我相同的写法,在大点的程序里不编译不会等于-1.$编译后就等于-1.$
就单单测试Round又不会出错,代码数值跟那程序完全一样。
 楼主| 发表于 2015-3-27 12:19:03 | 显示全部楼层
也算的不准
Round 结果有时候会= -1.$  有时候又不会
我相同的写法,在大点的程序里不编译不会等于-1.$ ...
zhouhaijin 发表于 2015-3-27 10:17



au3二进制和十进制计算转换修正不严谨,诸如此类的问题很多,所以财务等需准确数值的运算慎用au3。

小数、指数十进制转换到二进制是个近似值,二进制转换到十进制保留多位小数按理说应该更准确,所以在界面操作诸如窗口位置、大小等计算中是没问题的。

在需有精确数据的场合,办法是单位取大,避免出现小数,因为整数二进制和十进制转换在取值范围内是正确的。比如先乘以100、1000,在最后结果除以100、1000。碰到除数、指数计算出现小数,四舍五入的时机,要跟相关excel等协同处理的软件算法想统一。

简单的方法还是用c编个dll结合au3,c普通计算编程很容易的。不想学c,就用excel结合vba或au3编程,其他很多财务软件都带有编程功能的。

au3是好东西,也不要因为数字计算等问题,就怕用au3。我原来用vb较多,现在基本不用了,c是au3的母语言,就是不学,还是要了解一下的,同在流行的编程语言大多数是类c语言,对转学其他语言好处也很大。pc编程对业余爱好者来说,一般场合用au3对付是较好的选择。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-23 07:37 , Processed in 0.083675 second(s), 14 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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