发现Math.Round的一个问题。不知谁能告诉我,微软这么做这个函数,意义何在?

proking 2004-11-11 10:14:58
发觉微软的Math.Round,并非我们所想的四舍五入法。(也并非五舍六入)

--微软MSDN Libary 中是这么介绍的.
Math.Round 方法
返回最接近指定值的数字。

示例
下面的代码演示就近舍入。

[Visual Basic]
Math.Round(3.44, 1) 'Returns 3.4.
Math.Round(3.45, 1) 'Returns 3.4.
Math.Round(3.46, 1) 'Returns 3.5.

就看他的示例,还以为是五舍六入呢.

但测试发现是这样子的
Math.Round(3.05, 1) 'Returns 3.0.
Math.Round(3.15, 1) 'Returns 3.2.
Math.Round(3.25, 1) 'Returns 3.2.
Math.Round(3.35, 1) 'Returns 3.4.
Math.Round(3.45, 1) 'Returns 3.4.
Math.Round(3.55, 1) 'Returns 3.6.
Math.Round(3.65, 1) 'Returns 3.6.
Math.Round(3.75, 1) 'Returns 3.8.
Math.Round(3.85, 1) 'Returns 3.8.
Math.Round(3.95, 1) 'Returns 4.0.

后来查MSDN Libary中的Decimal.Round 方法中见到。
备注
当 d 正好位于两个舍入值的正中间时,结果将是最右边小数位中有偶数位的舍入值。例如,当舍入为两位小数时,值 2.345 变成 2.34,而值 2.355 变成 2.36。此过程称为向偶舍入或就近舍入。


不知谁能告诉我,微软这么做这个函数,意义何在?
...全文
152 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
just_Try 2004-11-11
  • 打赏
  • 举报
回复
"这就是偶进奇舍啊 比四舍五入更科学
如果一定要用四舍五入的话要自己做"老兄,你看清楚了没???哈哈哈哈哈,哈。
proking 2004-11-11
  • 打赏
  • 举报
回复
SQL Server 2000中的Round函数,是完全四舍五入的。
duguguiyu1984 2004-11-11
  • 打赏
  • 举报
回复
恩 这就是偶进奇舍啊 比四舍五入更科学
如果一定要用四舍五入的话要自己做
qiangsheng 2004-11-11
  • 打赏
  • 举报
回复
高深莫测
proking 2004-11-11
  • 打赏
  • 举报
回复
想是这样子的.

从统计学的角度,"四舍六入五成双"比"四舍五入"要科学,它使舍入后的结果有的变大,有的变小,更平均.而不是像四舍五入那样逢五就入,导致结果偏向大数.
iYoung 2004-11-11
  • 打赏
  • 举报
回复
四舍六入五成双
所谓的银行家舍入法,从统计学意义上更科学
proking 2004-11-11
  • 打赏
  • 举报
回复
我当然知道是偶进奇舍。也写得很清楚。只是我觉得同为微软的东东。
round 好象四舍五入。但这里改成这样,有点不习惯而已。

要四舍五入并不难
Public Function Round(ByVal dobValue As Double, ByVal intDight As Integer) As Double
Return Fix(dobValue * Math.Pow(10, intDight) + 0.5) / Math.Pow(10, intDight)
End Function

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧