C# Math.Round()的银行家算法
可能很多人都跟我一样,都只知道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()的银行家算法的更多相关文章
- Round() 四舍五入 js银行家算法(转)
首先问一下round(0.825,2) 返回的结果,大家猜一猜, 首先SQL server 返回的是 0.83 js的返回结果 是0.83,code 如下: var b = 0.825; ...
- Round() 四舍五入 js银行家算法
首先问一下round(0.825,2) 返回的结果,大家猜一猜, 首先SQL server 返回的是 0.83 js的返回结果 是0.83,code 如下: var b = 0.825; ...
- round函数——银行家舍入算法
在处理四舍五入时,相信大部分人会使用math.round函数(不同的语言应该都有).有没有考虑过,这个函数是不是自己所需要的? po主碰到的问题是用来计算平均分.有个顶真的学生反映,明明是86.5,怎 ...
- C#对应JavaScript的银行家舍入规则(Math.Round()对应toFixed(f))
Math.Round((n * u - t * u )/ u, f);//这里使用银行家四舍五入对应JS的 toFixed() ((n * u - t * u) / u).toFixed(f) f为小 ...
- C#中Math.Round()实现中国式四舍五入
C#中Math.Round()实现中国式四舍五入 C#中的Math.Round()并不是使用的"四舍五入"法.其实在VB.VBScript.C#.J#.T-SQL中Round函数都 ...
- Math.Round函数详解
有不少人误将Math.Round函数当作四舍五入函数在处理, 结果往往不正确, 实际上Math.Round采用的是国际通行的是 Banker 舍入法. Banker's rounding(银行家舍入) ...
- .Net中Math.Round与四舍五入
有不少人误将Math.Round函数当作四舍五入函数在处理, 结果往往不正确, 实际上Math.Round采用的是国际通行的是 Banker 舍入法. Banker's rounding(银行家舍入) ...
- C#中Math.Round()的中国式用法
C#中的Math.Round()并不是使用的"四舍五入"法.而是(银行家算法),即:四舍六入五取偶.事实上这也是IEEE的规范,因此所有符合IEEE标准的语言都应该采用这样的算法. ...
- C# Math.Round
不能直接调用Math.Round方法的,这可和Java的不一样哦Math.Round这个函数的解释是将值按指定的小数位数舍入,并不就是四舍五入.这种舍入有时称为就近舍入或四舍六入五成双 C# code ...
随机推荐
- idea内存不足或过大闪退
昨天在码云找了个开源后台项目https://gitee.com/shuzheng/zheng,各种修改后终于跑起来了, 运行没多久就提示内存不足,安装目录配置虚拟机最大可用内存为512M idea弹窗 ...
- FMX开源控件
FMX开源控件 这是群友谢顿做的控件,必须赞一个! https://github.com/zhaoyipeng/FMXComponents 这是loki的: https://sourceforge.n ...
- arcpy 获得是否为布局mxd.activeView
arcpy 获得是否为布局mxd.activeView print mxd.activeView PAGE_LAYOUT mxd.pageSizePageSize(width=21.590043180 ...
- HTML、 CSS、 JavaScript三者的关系
HTML. CSS. JavaScript三者的关系 网页主要由三部分组成: 结构( Structure) . 表现( Presentation) 和行为( Behavior) HTML ...
- 《你不知道的JavaScript(上)》笔记——词法作用域
词法作用域是一套关于引擎如何寻找变量以及会在何处找到变量的规则. 词法作用域最重要的特征是它的定义过程发生在代码的书写阶段(假设你没有使用eval() 或 with) 欺骗词法:指修改词法作用域, 欺 ...
- <JavaScript> 关于闭包和this对象
1.this指向windows是如何得出的 var name = "The Window"; var object = { name : "My Object" ...
- [Scikit-learn] 1.1 Generalized Linear Models - Logistic regression & Softmax
二分类:Logistic regression 多分类:Softmax分类函数 对于损失函数,我们求其最小值, 对于似然函数,我们求其最大值. Logistic是loss function,即: 在逻 ...
- [ML] Bayesian Logistic Regression
简单概率分类 Ref: 逻辑回归与朴素贝叶斯有什么区别? Ref: 机器学习笔记——逻辑回归(对数几率回归)和朴素贝叶斯分类器的对比 首先,搞清楚一个问题. naive bayes 能分类:逻辑回归也 ...
- getchwd() 函数返回当前工作目录。
getchwd() 函数返回当前工作目录.
- xcode报错: 找不到路径或者资源错误:no such file or directory
报错截图: 出现的问题: 运行项目页面图片不显示. 解决方法: 1>[COMMAND+shift+G],前往文件夹,输入: ~/Library/Developer/Xcode/DerivedD ...