js四舍五入银行家算法

js四舍五入银行家算法一下是银行家算法的口诀四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一对标go的银行家算法,有几个地方要说明一下当保留小数点n位时,如果第n+1位是5,n+1位后面存在非0值的话是进位的,并非只看n+2是否为0值当go得到的值是-0时,js中得到的是0以下是代码functionbankCalc(src,pos){src=leftMove(src,pos)letincI=src>0?1:-1//进位值

一下是银行家算法的口诀

四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一

  • 有几个地方要说明一下
    1. 当保留小数点n位时,如果第n+1位是5n+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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注