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

[网络通信] [以解决+远超预期]"四舍五入"无法搞定?

 火... [复制链接]
发表于 2015-3-17 00:31:35 | 显示全部楼层
补充一下,二进制、任何数的四舍五入,道理也是一样的
发表于 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位的
发表于 2015-3-17 00:44:50 | 显示全部楼层
回复 74# netegg
    哦,本问题如果使用 round ,则 +0.001,如果语言中没有 round 函数,则需要 +0.005;保留三位要加也是加0.0001的,道理一样
发表于 2015-3-17 00:50:48 | 显示全部楼层
回复 78# iva
对,只是偷换下,或者说投机取巧的办法,这么做可以,只是想在不做这些的情况下,把楼主的问题解决下而已
发表于 2015-3-17 00:59:04 | 显示全部楼层
楼主结贴吧,没什么继续讨论的感觉了
发表于 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位数据的,有算法的
发表于 2015-3-17 01:05:43 | 显示全部楼层
回复 81# iva
算法是有,不是还是自己写,不是原生的
发表于 2015-3-17 01:10:26 | 显示全部楼层
我去,折腾这个,两天没理媳妇了
发表于 2015-3-17 01:10:46 | 显示全部楼层
回复 79# netegg
不是投机取巧,或偷换,是数学方法,round函数的底层(最终二进制)也是这么算的
发表于 2015-3-17 01:13:30 | 显示全部楼层
本帖最后由 netegg 于 2015-3-17 01:24 编辑


相信没多少人做科学计算,这点精度,不考虑也罢,还是

再给一个投机取巧的办法吧,不就是0~4不进位,5~9进位吗
用这个作为加数number(stringright($num, 1)) <5?0:1)就够用了
发表于 2015-3-17 01:21:43 | 显示全部楼层
回复 85# netegg
嘿嘿,这点精度?财务上差0.01元对不上账,甭想睡觉
发表于 2015-3-17 01:26:23 | 显示全部楼层
回复 86# iva
所以底层会计本来就不是人干的,做的再精细,到审计那儿,想查一查一准
发表于 2015-3-17 08:48:49 | 显示全部楼层
回复 70# gto250

测试了$n为负数时没结果
发表于 2015-3-17 20:14:39 | 显示全部楼层
回复 86# iva


  如果你是用在财务上的话,au3的“四舍五入”就没有问题了。其实正确的来说应该是银行家算法,四舍六入五取偶
发表于 2015-3-17 20:17:40 | 显示全部楼层
回复 88# zldfsz
   如果你想实现au3里面的round的话,那就还要在我的代码里添加Ceiling和Floor,自己搞定吧
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

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

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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