自写小函数处理 javascript 0.3*0.2 浮点类型相乘问题

Posted 诗酒明月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自写小函数处理 javascript 0.3*0.2 浮点类型相乘问题相关的知识,希望对你有一定的参考价值。

const reg = /^([0-9]+)\.([0-9]*)$/;
// 判断是不是浮点数
const isFloat = function(number){
    return reg.test(number);
}

// 去除小数点转为整数
const floatToInt = function(head,tail){//head:String tail:String
    // head和tail都是字符串 Number("005")可以去零
    let result = head + Number(tail);
    return Number(result);//处理head为0的情况
}
// 小数点后的长度e-n n为多少
const tailLen = function(tail){//tail:String
    return tail.length;
}
// 匹配数组包含了小数点左右两边的数据
const handlerFloat = function(float){//float:Float
    return reg.exec(float);

}
// 非浮点数的情况下判断传入的数据类型是否为合理数据
const canHandler = function(data){
    let toString = Object.prototype.toString;
    let isNaN = data => typeof data=== ‘number‘ && data !== + data;
    let isBoolean =  data === true || data === false || toString.call(data) === "[object Boolean]";
    let isNull = data === null;
    let isUndefined = data === void 0;
    let isNumber = typeof data === ‘number‘ || toString.call(data) === "[object Number]";
    let isString = typeof data === ‘string‘ || toString.call(data) === "[object String]";
    if(isNaN(data) || isBoolean || isNull || isUndefined){
        // throw new Error("only Number or String type");
        console.log("only Number or String type");
        return false;
    }
    return isNumber || (isString && !isNaN(Number(data)));
}

// API
const floatMult=function(f1,f2){
    if(isFloat(f1) && isFloat(f2)){
        var eNum1,eNum2,match1,match2,int1,int2;
        // 匹配数组
        match1 = handlerFloat(f1);
        match2 = handlerFloat(f2);
        //小数点后 这里用于转为科学计数法 
        eNum1  = match1[2].length;
        eNum2  = match2[2].length;
        // 去掉小数点 转为整数
        int1   = floatToInt(match1[1],match1[2]);
        int2   = floatToInt(match2[1],match2[2]);
        // 0.2*0.3 = 2*3*(e-2) = (2*3)/100
        return (int1*int2)/(Math.pow(10,(eNum1+eNum2)));

    }else{
        return canHandler(f1) && canHandler(f2) && f1 * f2 ;
    }

}
// 暴露接口
module.exports = floatMult;


console.log(floatMult(0.2,0.3));//0.06
console.log(floatMult(1.3,1.2));//1.56
console.log(floatMult(123.4,6456.3));//796707.42
console.log(floatMult(.2,.3));//0.06
console.log(floatMult(1,0.3));//0.3
console.log(floatMult(12,55));//660
console.log(floatMult("0.2","0.3"));//0.06
console.log(floatMult("0.2",0.3));//0.06
console.log(floatMult("12","25"));//300
console.log(floatMult("12",55));//660
console.log(floatMult("1.3.3",1.3));//false
console.log(floatMult(true,0.3));//false "only Number or String type"
console.log(floatMult(null,0.2));//false "only Number or String type"
console.log(floatMult(void 0,0.3));//false "only Number or String type"

 

以上是关于自写小函数处理 javascript 0.3*0.2 浮点类型相乘问题的主要内容,如果未能解决你的问题,请参考以下文章

如何解决JavaScript中0.1+0.2不等于0.3

如何解决JavaScript中0.1+0.2不等于0.3

解决JavaScript中0.1+0.2不等于0.3问题

《javaScript100例|03》自写javaScript+CSS轮显效果

前端面试 JavaScript— 0.1+0.2为什么不等于0.3?如何实现等于0.3?

为什么在JavaScript中0.1+0.2不等于0.3?