以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://222.73.7.161/bbs/index.asp)
--  高级功能研发区  (http://222.73.7.161/bbs/list.asp?boardid=5)
----  关于Round函数的问题  (http://222.73.7.161/bbs/dispbbs.asp?boardid=5&id=79359)

--  作者:wsanle
--  发布时间:2015/6/3 21:50:30
--  关于Round函数的问题
版主:Round()函数是四舍五入的函数,按理是小数4以下舍去,5以上进一位,但是以下计算确是这样,不知为什么?
        c0=77.344
c1=77.345
c2=77.346
c3=77.347
c4=77.348
c5=77.349
Application.MsgOut Round(c0,2)
Application.MsgOut Round(c1,2)
Application.MsgOut Round(c2,2)
Application.MsgOut Round(c3,2)
Application.MsgOut Round(c4,2)
Application.MsgOut Round(c5,2)


       77.34
       77.34
       77.35
       77.35
       77.35
       77.35

      难道77.345四舍五入后不是77.35吗?

--  作者:admin
--  发布时间:2015/6/3 21:54:48
--  
计算机的数学函数就是这样的,如果你在意这个,你可以自己写一个四舍五入的函数
--  作者:wsanle
--  发布时间:2015/6/3 22:30:12
--  
取股票的涨跌停牌价格和实际价格会有差距,因为取到的a和b的值是3位小数,四舍五入后和实际涨跌停板价格差1分钱,怎么办?
Set Reports = marketdata.GetReportData(Code,MARKET)
a=Reports.UpperLimitPrice
b=Reports.LowerLimitPrice


--  作者:admin
--  发布时间:2015/6/4 0:16:52
--  

你把哪支股票的代码贴过来,

另外,a和b都是什么值,我们看看帮你找一下解决方案


--  作者:wjs
--  发布时间:2015/6/5 12:24:09
--  
在 VB,VBScript,C#,J#,T-SQL 中 Round 函数都是采用 Banker\'s rounding(银行家舍入)算法,即四舍六入五取偶。事实上这也是 IEEE 规定的舍入标准。因此所有符合 IEEE 标准的语言都应该是采用这一算法的。
为了避免四舍五入规则造成的结果偏高,误差偏大的现象出现,一般采用四舍六入五留双规则(Banker\'s Rounding)。
  准确而言,四舍六入五留双应称作“四舍六入,逢五无后则留双”,如此就可以完全覆盖此规则的详情。