四舍六入五成双银行家算法的 PHP和Javascript实现

四舍六入五成双

http://baike.baidu.com/view/1245064.htm?fr=aladdin

  四舍六入五成双是一种比较精确比较科学的计数保留法,是一种数字修约规则。
  对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,这种修约(舍入)规则是“四舍六入五成双”,也即“4舍6入5凑偶”这里“四”是指≤4 时舍去,"六"是指≥6时进上,"五"指的是根据5后面的数字来定,当5后有数时,舍5入1;当5后无有效数字时,需要分两种情况来讲:①5前为奇数,舍5入1;②5前为偶数,舍5不进。(0是最小的偶数)
  具体规则如下:
  1. 被修约的数字等于或小于4时,该数字舍去;
  2. 被修约的数字等于或大于6时,则进位;
  3. 被修约的数字等于5时,要看5前面的数字,若是奇数则进位,若是偶数则将5舍掉,即修约后末尾数字都成为偶数;若5的后面还有不为“0”的任何数,则此时无论5的前面是奇数还是偶数,均应进位。
   
   举例,用上述规则对下列数据保留3位有效数字:   9.8249=9.82, 9.82671=9.83   9.8350=9.84, 9.8351 =9.84

PHP:

function round2($num,$precision){
    $pow = pow(10,$precision);
    if(  (floor($num * $pow * 10) % 5 == 0) && (floor( $num * $pow * 10) == $num * $pow * 10) && (floor($num * $pow) % 2 ==0) ){//舍去位为5 && 舍去位后无数字 && 舍去位前一位是偶数    =》 不进一
        return floor($num * $pow)/$pow;
    }else{//四舍五入
        return round($num,$precision);
    }
}
echo round2(3.504501,3);

JavaScript:

function round2(num,precision){
    var dnum = Math.pow(10,precision);
    if(Math.floor(num*dnum*10)%5 == 0 && Math.floor(num*dnum*10) == num*dnum*10 && Math.floor(num*dnum)%2 == 0){
        return Math.floor(num*dnum)/dnum;
    }else{
        return Math.round(num,precision);
    }
}
alert(round2(3.504501,3));

From: http://blog.sina.com.cn/s/blog_47542995010144ro.html

时间: 2024-08-03 11:06:55

四舍六入五成双银行家算法的 PHP和Javascript实现的相关文章

JS toFixed 四舍六入五成双

以前一直以为toFixed就是四舍五入的方法,后来又有一段时间以为toFixed是五舍六入.今天终于写的时候,终于才知道toFixed是一个叫做四舍六入无成双的诡异的方法... 完全不明白为什么要这么写... 什么是四舍六入五成双:百度是这么说的: 对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,这种修约(舍入)规则是"四舍六入五成双",也即"4舍6入5凑偶"这里"四"是指≤4 时舍去,"六&q

四舍六入五成双(四舍六入奇偶效验)银行家算法

规则: 四舍六入五考虑. 五后非零就进一, 五后皆零看奇偶, 五前为偶应舍去, 五前为奇要进一. c#: Math.Round(new Decimal(1.2050),2) 1.2 Math.Round(new Decimal(1.2150),2) 1.22 Math.Round(new Decimal(1.2250),2) 1.22 Math.Round(new Decimal(1.2350),2) 1.24 Math.Round(new Decimal(1.2450),2) 1.24 Mat

四舍六入五成双并保留一位有效位-数据修约

/// <summary> /// 数据修约 -- 四舍六入5成双,至少保留一位有效位 /// 数值0.00512,保留2位,修约为0.01 /// </summary> /// <param name="modifyValue">原始数据</param> /// <param name="degit">保留位数</param> /// <returns></returns&g

算法:四舍六入五成双 ,保留三位有效数字

/// <summary> /// 格式化 Decimal 数字 用于有效计算 /// </summary> /// <param name="ori"></param> /// <returns></returns> /// <remarks></remarks> public static decimal FormatDecimal(decimal ori) { if (ori == 0

x264代码剖析(十五):核心算法之宏块编码中的变换编码

x264代码剖析(十五):核心算法之宏块编码中的变换编码 为了进一步节省图像的传输码率,需要对图像进行压缩,通常采用变换编码及量化来消除图像中的相关性以减少图像编码的动态范围.本文主要介绍变换编码的相关内容,并给出x264中变换编码的代码分析. 1.变换编码 变换编码将图像时域信号变换成频域信号,在频域中图像信号能量大部分集中在低频区域,相对时域信号,码率有较大的下降. H.264对图像或预测残差采用4×4整数离散余弦变换技术,避免了以往标准中使用的通用8×8离散余弦变换逆变换经常出现的失配问题

五种常用的算法设计技巧之二:分治算法

一,介绍 分治算法主要包含两个步骤:分.治.分,就是递归地将原问题分解成小问题:治则是:在解决了各个小问题之后(各个击破之后)合并小问题的解,从而得到整个问题的解 二,分治递归表达式 分治算法一般都可以写出一个递归表达式:比如经典的归并排序的递归表达式:T(N)=2T(N/2)+O(N) T(N)代表整个原问题,采用了分治解决方案后,它可以表示成: ①分解成了两个规模只有原来一半(N/2)的子问题:T(N/2) ②当解决完这两个子问题T(N/2)之后,再合并这两个子问题需要的代价是 O(N) 递

近五成房企去年净利润下滑

近五成房企去年净利润下滑 近五成房企去年净利润下滑 近五成房企去年净利润下滑 近五成房企去年净利润下滑 http://www.yupoo.com/photos/tags/=%e4%b8%8a%e6%b5%b7%e6%89%be%e4%b8%aa%e5%b0%8f%e5%a7%90%e5%8c%85%e5%a4%9c%e6%9c%8d%e5%8a%a1%e5%a4%9a%e5%b0%91%e9%92%b1%e2%97%86155x1029x8887%e2%97%86%e2%86%922015%e5

我的软考之路(五)——数据结构与算法(3)之图

图跟树一样,也是非线性结构,咋看起来有点复杂,其实它很简单.树具有层次关系,上层元素可以与下一个多个元素连接,但是只能和上层的一个元素连接.在图结构中,节点间的连接是任意的,任何一个元素都可以与其他元素连接. 图相对而言很简单,我们只介绍的图的遍历和最小生成树,现在我们开始. 遍历 1.概念 从图中某一个顶点出发,访问图中的每一个结点,并要求只能访问一次,不能重复访问. 2.方法 (1)广度优先遍历 基本思想:首先访问顶点,再访问顶点的全部未访问的邻结点,再访问邻结点的所有结点即可(类似树的层次

一线城市年内卖地已狂揽4500亿 楼面均价涨逾五成

一线城市年内卖地已狂揽4500亿 楼面均价涨逾五成 行业动态证券日报王丽新2014-11-20 01:22 我要分享 2 [摘要]有分析人士预计,一线城市全年土地收入总额将突破去年创造的5245亿元的历史纪录. 楼市的寒冬似乎并未传导至土地市场,甚至没有耽误一线城市土地出让楼面地价的节节攀升. 据中原地产市场研究部统计数据显示,截至11月18日,2014年年内,“北上广深”四个一线城市总土地成交金额已高达4519亿元,平均楼面单价为每平方米8341.9元,比2013年年度的平均楼面单价大涨53.