iva
发表于 2015-3-17 00:31:35
补充一下,二进制、任何数的四舍五入,道理也是一样的
netegg
发表于 2015-3-17 00:33:15
本帖最后由 netegg 于 2015-3-17 00:41 编辑
回复 76# iva
道理一样,只是二进制的位数问题,前面已经给出对应的二进制数了,autoit认不出来的
c的float类型数据的表示范围为-3.4*10^38~+3.4*10^38。double为-1.7*10^-308~1.7*10^308,long double为-1.2*10^-4932~1.2*10^4932
一些 AutoIt 内置函数只能工作于 32 位数字,暂且不说别的就算是38位,后面那几位怎么判断,看看前面那几个数的二进制,哪个是少于32位的
iva
发表于 2015-3-17 00:44:50
回复 74# netegg
哦,本问题如果使用 round ,则 +0.001,如果语言中没有 round 函数,则需要 +0.005;保留三位要加也是加0.0001的,道理一样
netegg
发表于 2015-3-17 00:50:48
回复 78# iva
对,只是偷换下,或者说投机取巧的办法,这么做可以,只是想在不做这些的情况下,把楼主的问题解决下而已
netegg
发表于 2015-3-17 00:59:04
楼主结贴吧,没什么继续讨论的感觉了
iva
发表于 2015-3-17 01:03:32
回复 77# netegg
+0.0001,如果加0.001原来就是0.**4怎么出来,还不是要出来个.005
0.**4 + 0.0001 = 0.**41,不等于.005
另76楼 说的道理是一样的,位数不够就没办法了,这是32位限制的,真要处理,即使8位机,也能处理64位数据的,有算法的
netegg
发表于 2015-3-17 01:05:43
回复 81# iva
算法是有,不是还是自己写,不是原生的
netegg
发表于 2015-3-17 01:10:26
我去,折腾这个,两天没理媳妇了{:face (319):}
iva
发表于 2015-3-17 01:10:46
回复 79# netegg
不是投机取巧,或偷换,是数学方法,round函数的底层(最终二进制)也是这么算的
netegg
发表于 2015-3-17 01:13:30
本帖最后由 netegg 于 2015-3-17 01:24 编辑
{:face (394):}
相信没多少人做科学计算,这点精度,不考虑也罢,还是
{:face (394):}
再给一个投机取巧的办法吧,不就是0~4不进位,5~9进位吗
用这个作为加数number(stringright($num, 1)) <5?0:1)就够用了
iva
发表于 2015-3-17 01:21:43
回复 85# netegg
嘿嘿,这点精度?财务上差0.01元对不上账,甭想睡觉
netegg
发表于 2015-3-17 01:26:23
回复 86# iva
所以底层会计本来就不是人干的,做的再精细,到审计那儿,想查一查一准
zldfsz
发表于 2015-3-17 08:48:49
回复 70# gto250
测试了$n为负数时没结果
gto250
发表于 2015-3-17 20:14:39
回复 86# iva
如果你是用在财务上的话,au3的“四舍五入”就没有问题了。其实正确的来说应该是银行家算法,四舍六入五取偶
gto250
发表于 2015-3-17 20:17:40
回复 88# zldfsz
如果你想实现au3里面的round的话,那就还要在我的代码里添加Ceiling和Floor,自己搞定吧