js 进一法、四舍五入法、舍去法 精确保留两位小数 兼容浮点运算

js 进一法、四舍五入法、舍去法 精确保留两位小数 兼容浮点运算 

转载自:https://blog.csdn.net/ganggang4321/article/details/88892686

/**
 * 格式化数字
 * @param num 要格式化的数字
 * @param len 保留小数位数默认2
 * @param type 格式化方式0:四舍五入 1:进一  2:舍去 默认0
 * @return string
 */

function format_number(num,len,type) {
    len = len > 0 && len <= 20 ? len : 2;
    var result = parseFloat(num);
    num=isNaN(result)?0:result;  // isNaN判断是否为非数值型
    var numpow=Math.pow(10,len); // 求幂方
    var numcheng=accMul(num,numpow);
    if(type==1){//ceil进一 
        result = Math.ceil(numcheng);
    }else if(type==2){//floor舍去
        result = Math.floor(numcheng);
    }else{//round四舍五入 
        result = Math.round(numcheng);
    }
    result =accDiv(result,numpow);
    var s_x = result.toString();
    var pos_decimal = s_x.indexOf('.');
    if (pos_decimal < 0) {pos_decimal = s_x.length;s_x += '.';}
    while (s_x.length <= pos_decimal + len) {s_x += '0';}
    return s_x;
}
//乘法函数
function accMul(arg1, arg2) {
    var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
    console.log(s1,s2, '对应参数转换?')
    try {m += s1.split(".")[1].length;}catch (e) {console.log(e)}
    try {m += s2.split(".")[1].length;}catch (e) {console.log(e)}
    console.log(m)
    return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
}
//除法函数
function accDiv(arg1, arg2) {
    var t1 = 0, t2 = 0, r1, r2;
    try {t1 = arg1.toString().split(".")[1].length;}catch (e) {}
    try {t2 = arg2.toString().split(".")[1].length;}catch (e) {}
    r1 = Number(arg1.toString().replace(".", ""));
    r2 = Number(arg2.toString().replace(".", ""));
    return (r1 / r2) * Math.pow(10, t2 - t1);

}   
 
// console.log(format_number('6.1145675767879',2, 1)); // 6.12

console.log(accMul(10.1123, 20)) // 202.246

 

posted @ 2021-02-02 14:59  可可西里的骄傲  阅读(866)  评论(0编辑  收藏  举报