四舍六入五成双 http://baike.baidu.com/view/1245064.htm?fr=aladdin 四舍六入五成双是一种比较精确比较科学的计数保留法,是一种数字修约规则。 对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,这种修约(舍
四舍六入五成双
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:
<span>function</span> round2(<span>$num</span>,<span>$precision</span><span>){ </span><span>$pow</span> = <span>pow</span>(10,<span>$precision</span><span>); </span><span>if</span>( (<span>floor</span>(<span>$num</span> * <span>$pow</span> * 10) % 5 == 0) && (<span>floor</span>( <span>$num</span> * <span>$pow</span> * 10) == <span>$num</span> * <span>$pow</span> * 10) && (<span>floor</span>(<span>$num</span> * <span>$pow</span>) % 2 ==0) ){<span>//</span><span>舍去位为5 && 舍去位后无数字 && 舍去位前一位是偶数 =》 不进一</span> <span>return</span> <span>floor</span>(<span>$num</span> * <span>$pow</span>)/<span>$pow</span><span>; }</span><span>else</span>{<span>//</span><span>四舍五入</span> <span>return</span> <span>round</span>(<span>$num</span>,<span>$precision</span><span>); } } </span><span>echo</span> round2(3.504501,3);
JavaScript:
<span>function</span><span> round2(num,precision){ </span><span>var</span> dnum = Math.pow(10<span>,precision); </span><span>if</span>(Math.floor(num*dnum*10)%5 == 0 && Math.floor(num*dnum*10) == num*dnum*10 && Math.floor(num*dnum)%2 == 0<span>){ </span><span>return</span> Math.floor(num*dnum)/dnum; }<span>else</span><span>{ </span><span>return</span><span> Math.round(num,precision); } } alert(round2(</span>3.504501,3));
From: http://blog.sina.com.cn/s/blog_47542995010144ro.html