JS中浮点数四舍五入的处理

由于js中字符编码的关系,处理浮点数能力比较差。如果大家在编程过程中需要经常使用,可以提取这部分的功能放在公共的地方,使用时直接调用即可。下面show一下我的处理方法:

 

/**
 * 把一个浮点数,以小数点后几位四舍五入
 * @param srcValue 要舍位的值
 * @param iCount  要舍位到小数点后几位
 * @return 四舍五入后的数
 */
function round(srcValuef, iCount) {
    var srcValue=srcValuef;
    var zs=true;
    // 判断是否是负数
    if (srcValue<0){
        srcValue=Math.abs(srcValue);
        zs=false;
    }
    var iB = Math.pow(10, iCount);
    var value1 = srcValue * iB;
    var anumber = new Array();
    var anumber1 = new Array();

    var fvalue = value1;    // 保存原值
    var value2 = value1.toString();
    var idot = value2.indexOf(".");
 
    // 如果是小数
    if (idot!=-1){
        anumber = srcValue.toString().split(".");
        // 如果是科学计数法结果
        if (anumber[1].indexOf("e") != -1 || anumber[1].indexOf("E") != -1){
            return Math.round(value1)/iB;
        }
       
        anumber1=value2.split(".");
        if (anumber[1].length <= iCount){
            return parseFloat(srcValuef,10);
        }
   
        var fvalue3=parseInt(anumber[1].substring(iCount,iCount+1),10);
        if (fvalue3 >= 5){
            fvalue=parseInt(anumber1[0],10)+1;
        } else {
            //对于传入的形如111.834999999998 的处理(传入的计算结果就是错误的,应为111.835)
            if (fvalue3==4 && anumber[1].length>10 && parseInt(anumber[1].substring(iCount+1,iCount+2),10)==9 ){
                fvalue=parseInt(anumber1[0],10)+1;
            } else {
                fvalue=parseInt(anumber1[0],10);
            }
        }
    }
 
    // 如果是负数就用0减四舍五入的绝对值
    if (zs){
        return fvalue/iB;
    } else {
        return 0-fvalue/iB;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值