可能很多人都跟我一样,都只知道Math.Round()是C#中用来做四舍五入,保留指定小数位的

但实际上它并不是真正的四舍五入,而是银行家算法的四舍六入五取偶

事实上这也是IEEE的规范,因此所有符合IEEE标准的语言都应该采用这样的算法。

其规则如下:

1、当舍去位的数值小于5时。直接舍去

2、当舍去位的数值大于6时,进位加1

3、当舍去位的数值等于5时,分两种情况:

(1)若5后面有其他非0数字(即5不是最后一位)时,进位加1

 (2)若5后面只有0(即5是最后一位)时,则根据5的前一位的奇偶来判断,前一位为奇数则进位加1,为偶数则舍去

遇到5需要舍去的情况只有一种,即5是最后一位有效数且前一位数是偶数

数字的精度越大,则这个算法就越像真正的四舍五入

我们使用这个函数时,用来处理的数字通常是那些有n位小数的数字,而我们用于显示的通常也就只有2-4位,所以这也就不容易发现这个问题

可能光是文字大家不好理解,下面写几个例子

Math.Round(1.14 , ) //result:1.1
Math.Round(1.25 , ) //result:1 .2 五是最后一位且前一位为 偶数,也舍去
Math.Round(1.15 , ) //result:1 .2 五是最后一位但前一位为奇数,进位加一
Math.Round(1.16 , ) //result:1 .2

.NET 2.0 开始,Math.Round 方法提供了一个枚举选项 MidpointRounding.AwayFromZero 可以用来实现传统意义上的"四舍五入"。

Math.Round(1.25 , ) //result:1 .2
Math.Round(1.25 , , MidpointRounding.AwayFromZero) //result:1 .3

C# Math.Round()的银行家算法的更多相关文章

  1. Round() 四舍五入 js银行家算法(转)

    首先问一下round(0.825,2) 返回的结果,大家猜一猜, 首先SQL server 返回的是 0.83 js的返回结果 是0.83,code 如下: var b = 0.825;        ...

  2. Round() 四舍五入 js银行家算法

    首先问一下round(0.825,2) 返回的结果,大家猜一猜, 首先SQL server 返回的是 0.83 js的返回结果 是0.83,code 如下: var b = 0.825;        ...

  3. round函数——银行家舍入算法

    在处理四舍五入时,相信大部分人会使用math.round函数(不同的语言应该都有).有没有考虑过,这个函数是不是自己所需要的? po主碰到的问题是用来计算平均分.有个顶真的学生反映,明明是86.5,怎 ...

  4. C#对应JavaScript的银行家舍入规则(Math.Round()对应toFixed(f))

    Math.Round((n * u - t * u )/ u, f);//这里使用银行家四舍五入对应JS的 toFixed() ((n * u - t * u) / u).toFixed(f) f为小 ...

  5. C#中Math.Round()实现中国式四舍五入

    C#中Math.Round()实现中国式四舍五入 C#中的Math.Round()并不是使用的"四舍五入"法.其实在VB.VBScript.C#.J#.T-SQL中Round函数都 ...

  6. Math.Round函数详解

    有不少人误将Math.Round函数当作四舍五入函数在处理, 结果往往不正确, 实际上Math.Round采用的是国际通行的是 Banker 舍入法. Banker's rounding(银行家舍入) ...

  7. .Net中Math.Round与四舍五入

    有不少人误将Math.Round函数当作四舍五入函数在处理, 结果往往不正确, 实际上Math.Round采用的是国际通行的是 Banker 舍入法. Banker's rounding(银行家舍入) ...

  8. C#中Math.Round()的中国式用法

    C#中的Math.Round()并不是使用的"四舍五入"法.而是(银行家算法),即:四舍六入五取偶.事实上这也是IEEE的规范,因此所有符合IEEE标准的语言都应该采用这样的算法. ...

  9. C# Math.Round

    不能直接调用Math.Round方法的,这可和Java的不一样哦Math.Round这个函数的解释是将值按指定的小数位数舍入,并不就是四舍五入.这种舍入有时称为就近舍入或四舍六入五成双 C# code ...

随机推荐

  1. 【转】Mac find 去除 “Permission denied” 信息的方法

    转自 https://segmentfault.com/a/1190000007058875 Mac 下查找文件,最简单的方法应该是 mdfind filename 等同于 mdfind -name ...

  2. DELPHI10.3.1安卓照相

    DELPHI10.3.1安卓照相 解决方法:

  3. 我的新书,ArcGIS从0到1,京东接受预定,有160个视频,851分钟

     我的新书,ArcGIS从0到1,京东接受预定,8月08日至08月16日发货https://item.jd.com/53669213250.html当当网 http://product.dangdan ...

  4. 《你不知道的JavaScript(上)》笔记——函数作用域和块作用域

    关于函数声明:如果 function 是声明中的第一个词, 那么就是一个函数声明, 否则就是一个函数表达式.例如匿名函数这种形式,函数会被当作函数表达式而不是一个标准的函数声明来处理. (functi ...

  5. 如何获取linux内核的某个子系统的维护者邮箱?

    答: 如获取pwm子系统的维护者邮箱: ./scripts/get_maintainer.pl drivers/pwm

  6. C++ fill fill_n generate generate_n

    #include <iostream>#include <algorithm>#include <vector>#include <list>#incl ...

  7. JAVA 基础编程练习题36 【程序 36 移动位置】

    36 [程序 36 移动位置] 题目:有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数 package cskaoyan; public class cskao ...

  8. Bootstrap, 模态框实现值传递,自动勾选

    目录 Bootstrap,模态框自动勾选,值传递 1.父页面 2. 子页面(modal) 模态框 Bootstrap,模态框自动勾选,值传递 场景: ​ 有一个这样的需求, 在父页面有一个table, ...

  9. 【VS开发】内存映射文件进程间共享内存

    内存映射文件进程间共享内存 内存映射文件的另一个功能是在进程间共享数据,它提供了不同进程共享内存的一个有效且简单的方法.后面的许多例子都要用到共享内存.共享内存主要是通过映射机制实现的.Windows ...

  10. OpenGL.英文

    1. emission 英 [iˈmɪʃn] 美 [iˈmɪʃn] 排放 n. (光.热.气等的)发出,射出,排放;排放物;散发物 material 英 [məˈtɪəriəl] 美 [məˈtɪri ...