在处理四舍五入时,相信大部分人会使用math.round函数(不同的语言应该都有)。有没有考虑过,这个函数是不是自己所需要的?

po主碰到的问题是用来计算平均分。有个顶真的学生反映,明明是86.5,怎么显示86。经查,问题为使用round函数,86.5舍入后为86。以下转自百度百科:

银行家舍入

据 说大部分的编程软件都使用的是这种方法,也算是一种国际标准。 所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法。其规则是:当舍去位的数值小于5时,直接舍去该位;当舍去位的数值大于等于6 时,在舍去该位的同时向前位进一;当舍去位的数值等于5时,如果前位数值为奇,则在舍去该位的同时向前位进一,如果前位数值为偶,则直接舍去该位。
简单的说,就是:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一
 
示例:Math.Round(3.5,0)=4
Math.Round(4.5,0)=4
 
 po主玩编程多年,第一次意识到此问题。瀑布寒阿。据说很多语言,包括vb等,都是使用此算法。简单的解决方法是在要处理的数字后+一个很小的数,比如0.0000000001。
另,po主的同事从来不用此函数,四舍五入用的是(int)(para+0.5)。似乎也可以。
 
后记:po主请教了从事财务工作的同事和家属,都从未见识过此舍入算法。看来主要还是用于编程语言。

round函数——银行家舍入算法的更多相关文章

  1. 四舍五入VS银行家舍入法

    在学习python的时候,遇见了一个颠覆了我传统观念的四舍五入. 看下面,round()的结果和我们以前根深蒂固的四舍五入是不同的. >>> round(0.5) 0 >> ...

  2. Math.Round函数详解

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

  3. 一场Math.Round函数的误解

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

  4. C#中ROUND函数的问题 解决

    ROUND()是C#中math的一个成员函数.System.Math.Round(),这个函数有四种用法,最长用的是对小数点位数的舍入.但这和现实生活中的“四舍五入”有一定区别,也有别JAVA中Mat ...

  5. delphi 四舍五入Round函数【百帖整理】

    在最近版本的Delphi Pascal 编译器中,Round 函数是以 CPU 的 FPU (浮点部件) 处理器为基础的.这种处理器采用了所谓的 "银行家舍入法",即对中间值 (如 ...

  6. JS013. 重写toFixed( )方法,toFixed()原理 - 四舍五入?银行家舍入法?No!六舍七允许四舍五入√!

    以下为场景实测与原理分析,需要重写函数请直接滚动至页尾!!! 语法 - Number.prototype.toFixed( ) // toFixed()方法 使用定点表示法来格式化一个数值. numO ...

  7. 关于BigDecimal 和 double 类型保存金钱,以及精度问题,银行家舍入法

    1. BigDecimal 类型数据 的创建,构造函数 有 public BigDecimal(BigInteger intVal, long val, int scale, int prec); p ...

  8. Round函数

    Round():函数返回一个数值,舍入到指定的长度或精度 eg: --1) ) ---->123.9990 ) ---->124.0000 --3为需要舍入的位数 --2) ) ----- ...

  9. php中的ceil和floo以及round函数

    ceil是向上进位得到一个值的函数: floor是舍掉小数位得到一个值的函数: round是用来四舍五入的函数. ceil 定义和用法: ceil() 函数向上舍入为最接近的整数. ceil(x); ...

随机推荐

  1. poj 2976 Dropping tests (最大化平均值:二分查找)

    #include<iostream> #include<algorithm> #include<stdio.h> #include<math.h> #d ...

  2. 2019牛客暑期多校训练营(第三场)F 单调队列

    题意 给一个\(n\times n\)的矩阵,找一个最大的子矩阵使其中最大值与最小值的差小于等于\(m\). 分析 枚举子矩阵的上下边界,同时记录每一列的最大值和最小值. 然后枚举右边界,同时用两个单 ...

  3. IT公司技术博客地址

    IT公司技术博客 美团点评技术团队今日头条技术博客Tencent ISUX DesignTGideas-腾讯互动娱乐创意设计团队>AlloyTeam | 腾讯全端 AlloyTeam 团队 Bl ...

  4. Topics(主题模式)

    引言 topic exchange和direct exchange类似,都是通过routing key和binding key进行匹配,不同的是topic exchange可以为routing key ...

  5. Java中的多线程技术全面详解

    本文主要从整体上介绍Java中的多线程技术,对于一些重要的基础概念会进行相对详细的介绍,若有叙述不清晰或是不正确的地方,希望大家指出,谢谢大家:) 为什么使用多线程 并发与并行 我们知道,在单核机器上 ...

  6. 代码优化-多态代替IF条件判断

    场景描述 在开发的场景中,常常会遇到打折的业务需求,每个用户对应的等级,他们的打折情况也是不一样的.例如普通会员打9折,青铜会员打8.5折,黄金会员打8折等等.在一般开发中最简单的就是判断用户的等级, ...

  7. java拦截器获取请求完整参数

    public class OptLogAspect implements HandlerInterceptor { @Override public boolean preHandle(HttpSer ...

  8. CentOS7中使用GitBlit搭建自己的Git服务器

    1.搭建依赖库 yum install java yum install git yum install -y gcc-c++ curl-devel expat-devel gettext-devel ...

  9. windows驱动程序

    官网文档 https://docs.microsoft.com/zh-cn/windows-hardware/drivers/

  10. openerp学习笔记 对象调用(创建、修改),用于后台代码创建和更新对象

    #服务卡创建,自动更新服务卡为开卡状态    def create(self, cr, uid, values, context=None):        values['state'] = '1' ...