以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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)。
准确而言,四舍六入五留双应称作“四舍六入,逢五无后则留双”,如此就可以完全覆盖此规则的详情。 |