四舍五入VS银行家舍入 (四舍六入五取偶)
来源:互联网 发布:xp禁止程序访问网络 编辑:程序博客网 时间:2024/05/21 11:14
大家可以做一个Demo。
C#环境下
1: class Program
2: {
3: static void Main(string[] args)
4: {
5: do
6: {
7: Console.WriteLine("请输入一个小数回车测试,输入其他回车结束测试");
8: string Num = Console.ReadLine();
9: try
10: {
11: Console.WriteLine("结果为" + Convert.ToInt16(Convert.ToDouble(Num)));
12: }
13: catch (Exception e) {
14: break;
15: }
16: }
17: while (true );
18: }
19: }
得到的结果如下
VB.net环境下测试代码为
Sub Main() Do Console.WriteLine("请输入一个小数回车测试,输入其他回车结束测试。") Try Dim a As String = Console.ReadLine() Console.WriteLine("结果为:" & Math.Round(Convert.ToDouble(a))) Catch ex As Exception Exit Sub End Try Loop End Sub结果如下
完全符合银行家舍入的规律:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一
提示:“五后非零就进一”看上图示例中的1.51和2.51计算结果
关于VB.net中的CInt微软的MSDN上有具体说明
Fractional Parts. When you convert a nonintegral value to an integral type, the integer conversion functions (CByte,CInt,CLng, CSByte,CShort,CUInt,CULng, and CUShort) remove the fractional part and round the value to the closest integer.
If the fractional part is exactly 0.5, the integer conversion functions round it to the nearest even integer. For example, 0.5 rounds to 0, and 1.5 and 2.5 both round to 2. This is sometimes calledbanker's rounding, and its purpose is to compensate for a bias that could accumulate when adding many such numbers together.
相对于四舍五入,银行家舍入的确更加的准确,讨论如下:
有些童鞋可能认为在一般性的测量中,最后一位小数位上0至9出现的概率是相等的。一共十个数字,0至4可以舍去(四舍),5至9可以进位(五入),多么完美的舍入算法!
但是!您可能忽略了一点,末尾的0在这里是相当于10还是相当于0?
为了避免混沌,请看下图:
图中是用Matlab画的一个简单的数轴,可以看出0.0、0.1、0.2、0.3、0.4、0.5、0.6、0.7、0.8、0.9、1.0中0.0和1.0都是0结尾所以不能确定测量数据中的0是哪个零!
还是看上图,图中只要不满0.5都按照0算,大于0.5都按照1.0算,那么剩下的0.5怎么办?为了体现平均性,看上一位是奇数还是偶数,如果是奇数则进位,如果是偶数则舍去。这正是“银行家舍入”的思想。这样一来便达到了相对于“四舍五入”舍入方法更加平衡的舍入算法。
PS:“银行家舍入”是IEEE 规定的舍入标准。因此所有符合IEEE标准的语言都是采用这一算法的。
原文载于:http://www.cnblogs.com/beijiguangyong/archive/2011/04/12/2302777.html
- 四舍五入VS银行家舍入 (四舍六入五取偶)
- 四舍五入VS银行家舍入
- 银行家舍入VS四舍五入
- 银行家四舍五入法
- 四舍五入和银行家舍入法
- 四舍五入与 银行家算法
- php 四舍六入(银行家舍入)实现
- Round() 四舍五入 js银行家算法
- excel 中关于银行家舍入的问题
- C# 四舍五入、进一法、舍位(取整,舍去小数,向负无穷舍入)函数
- round函数四舍五入的规则(4舍6入5奇进偶不进)
- Delphi 四舍五入、只舍不入、只入不舍
- 初入VS和CSDN
- 四舍五入
- 四舍五入
- 四舍五入
- 四舍五入
- 四舍五入
- 链表
- 在XP系统上运行ADO程序。
- QML获取屏幕分辨率大小
- 学习Lua
- Spring MVC中各个filter的用法
- 四舍五入VS银行家舍入 (四舍六入五取偶)
- jsp 中 年份下拉列表
- PHP网站的安全性问题
- 字符串操作的那些事情
- Fedora网络配置
- 图论中的最小生成树算法
- C++编译错误
- Android 验证码:数字序列、计算结果
- Tomcat内存设置详解