以文本方式查看主题

-  易表在线答疑  (http://egrid2000.com/dvbbs/index.asp)
--  用户社区  (http://egrid2000.com/dvbbs/list.asp?boardid=2)
----  [讨论]奇怪的INT函数,请求支援  (http://egrid2000.com/dvbbs/dispbbs.asp?boardid=2&id=3052)

--  作者:swws
--  发布时间:2010/12/11 12:09:00
--  [讨论]奇怪的INT函数,请求支援
   因为太简单,就不上传文件了!    
   很简单一个表,简单的一个刷新公式c=a*b,然后用INT取整,却在月底对帐时让我郁闷了。少了一块钱,反复比对才找到错误出在INT函数上。C的刷新公式为INT(a*b),a的值是21.49,b的值是5400,都是输入的数据而不是计算得出的,这样就排除了小数位显示不全的可能。21.49X5400=116046,可INT一套就成了116045了,打电话咨询被告知可能是无限接近造成的偏差,让我用round函数,可我是要去零取整呀,用round那结果就没法用了。而且这两个数相乘跟6X6=36有什么区别呀!!!随数据量的增大,类似的错误恐怕还会出现,而现在我只能用21.49*5400.01才能修正,呵呵!
哪位老师有更好的办法?
--  作者:wjq1072
--  发布时间:2010/12/11 12:33:00
--  
Format(21.49 * 5400,"0")=116046
-Int(-21.49 * 5400)=116046
Round(21.49 * 5400,0)=116046
--  作者:swg-1954
--  发布时间:2010/12/11 12:39:00
--  
这样试试
egd文件下载
--  作者:lyjzyq
--  发布时间:2010/12/11 20:43:00
--  
Int(Eval(21.49*5400))可以,因为int函数是对一个数的取整,如果是表达式,可以先计算再取整。
--  作者:swws
--  发布时间:2010/12/26 13:28:00
--  
多谢各位,好久没上来看了,等下我都试一下!
--  作者:swws
--  发布时间:2010/12/26 14:10:00
--  
2楼 wjq1072 前辈的Round(21.49 * 5400,0)=116046,不适用。这样就4舍5入了,而单价X数量得出的金额付款时是会把小数部分去掉的,5入后的计算结果就会比实际付款多一块钱,这样会产生不少多一块的结果,月底对帐就麻烦了。
format(21.49 * 5400,"0")=116046和round怎么是同样的结果,也4舍5入了
-Int(-a * b)也是同样的结果

3楼和4楼的方法有效,谢谢各位!!!

-=-=-=- 以下内容由 swws2010年12月26日 02:12pm 时添加 -=-=-=-
Round函数仅能解决INT处理21.49*5400结果错误的问题,对于小数部分我需要全舍,取整。感觉INT函数有个Bug!