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

四舍六入五成双

四舍六入五成双是一种比较精确比较科学的计数保留法,是一种数字修约规则。

对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,这种修约(舍入)规则是“四舍六入五成双”,也即“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:

functionround2(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{returnMath.round(num,precision);

}

}

alert(round2(3.504501,3));

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

原文:http://www.cnblogs.com/imxiu/p/3962386.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值