一下是银行家算法的口诀
四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一
- 有几个地方要说明一下
- 当保留小数点
n
位时,如果第n+1
位是5
,n+1
位后面存在非0值的话是进位的,并非只看n+2
是否为0
值
- 当保留小数点
- 以下是代码
function bankCalc(src,pos){
src = leftMove(src,pos)
let incI = src>0?1:-1 // 进位值
src = "" + src
let start = src.indexOf(".")
// 相关校验
if (start == -1) {
return rightMove(src,pos);
}
let tmpPos = start + 1
if (tmpPos > src.length) {
return rightMove(src,pos);
}
let posNum = ~~src[tmpPos]
if ( posNum != 5) {
if (posNum > 5) {
return rightMove(trunc(src) + incI,pos)
} else {
return rightMove(trunc(src),pos)
}
}
// 查看后面的值是不是大于0,前面的算法保证了如果后面是0是不会显示的
if(tmpPos + 1 < src.length) {
return rightMove(trunc(src) + incI,pos)
}
// 校验奇偶
if(src[tmpPos-2]%2==0) {
return rightMove(trunc(src),pos)
} else {
return rightMove(trunc(src) + incI,pos)
}
}
function leftMove(src,pos){
return src * Math.pow(10,pos)
}
function rightMove(src,pos){
return (src / Math.pow(10,pos)).toFixed(pos)
}
function trunc(src){
if (src > 0) {
return Math.floor(src)
} else {
return Math.ceil(src)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/36900.html