可能很多人都跟我一样,都只知道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位,所以这也就不容易发现这个问题

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

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

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

  1. Math.Round(1.25 , ) //result:1 .2
  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. map初步(由ABBC--->A2BC)

    1.题目: Given a string containing only 'A' - 'Z', we could encode it using the following method: 1. Ea ...

  2. QMessageBox改变大小

    创建一个QMessageBox: QMessageBox msgBox(this);msgBox.setWindowTitle(tr("MailBox Location"));ms ...

  3. Maven 3.6.1 下载及安装配置

    Step1:Download You can download Maven3.6.1 from maven.apche.org , or from here. Step2:Unzip and add ...

  4. hey is a tiny program that sends some load to a web application.

    hey is a tiny program that sends some load to a web application. DOS attack DOS攻击生成 https://github.c ...

  5. 关于ios在H5页面长按识别二维码无效

    环境 框架: vue 操作系统: ios 解决 如果你的vue-router用了mode:history: 把它去掉用默认的就OK了

  6. Queue class

    #pragma once#include <iostream>#include <iomanip> using namespace std; class Queue{ stru ...

  7. 使用linux flock文件锁实现任务锁定避免计划任务程序冲突

    格式:flock [-sxun][-w #] fd#flock [-sxon][-w #] file [-c] command选项-s, --shared: 获得一个共享锁 -x, --exclusi ...

  8. Ubuntu 18.04 上使用xrdp远程桌面连接

    参考:https://blog.csdn.net/qq_25556149/article/details/82216190 1,环境查看 2,安装 xrdp.tightvncserver apt-ge ...

  9. iOS- UITextView禁止Emoji表情

    UITextView代理方法:判断 -(void)textViewDidEndEditing:(UITextView *)textView{        if ([self stringContai ...

  10. unity三维地球模型生成

    准备一张贴图   创建材质球 球面坐标系转直角坐标系 x=rsinθcosφ. y=rsinθsinφ. z=rcosθ. 效果如下   脚本如下 using System.Collections; ...