JS浮点数运算(j简单函数封装)和使用big.js


1、函数封装

 // 浮点数加法运算
    function floatAdd(arg1, arg2) {
        var r1, r2, m;
        try {
            r1 = arg1.toString().split(".")[1].length;
        } catch (e) {
            r1 = 0;
        }
        try {
            r2 = arg2.toString().split(".")[1].length;
        } catch (e) {
            r2 = 0;
        }
        m = Math.pow(10, Math.max(r1, r2));
        return (arg1 * m + arg2 * m) / m;
    }


    // 浮点数减法运算
    function floatSub(arg1, arg2) {
        var r1, r2, m, n;
        try {
            r1 = arg1.toString().split(".")[1].length;
        } catch (e) {
            r1 = 0
        }
        try {
            r2 = arg2.toString().split(".")[1].length;
        } catch (e) {
            r2 = 0
        }
        m = Math.pow(10, Math.max(r1, r2));
        n = (r1 >= r2) ? r1 : r2;
        return ((arg1 * m - arg2 * m) / m).toFixed(n);
    }

    // 浮点数乘法运算
    function floatMul(arg1, arg2) {
        var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
        try {
            m += s1.split(".")[1].length;
        } catch (e) {
        }
        try {
            m += s2.split(".")[1].length;
        } catch (e) {
        }
        return Number(s1.replace(".", "")) * Number(s2.replace(".", ""))
                / Math.pow(10, m);
    }


    // 浮点数除法运算
    function floatDiv(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) {
        }
        with (Math) {
            r1 = Number(arg1.toString().replace(".", ""));
            r2 = Number(arg2.toString().replace(".", ""));
            return (r1 / r2) * pow(10, t2 - t1);
        }
    }

    // 设置数值精度
    function setScale(value, scale, roundingMode) {
        if (roundingMode.toLowerCase() == "roundhalfup") {
            return (Math.round(value * Math.pow(10, scale)) / Math.pow(10, scale))
                    .toFixed(scale);
        } else if (roundingMode.toLowerCase() == "roundup") {
            return (Math.ceil(value * Math.pow(10, scale)) / Math.pow(10, scale))
                    .toFixed(scale);
        } else {
            return (Math.floor(value * Math.pow(10, scale)) / Math.pow(10, scale))
                    .toFixed(scale);
        }
    }


使用方法:

            setScale(value, scale, roundingMode) //设置精度 参数1、设置的值,2、保留几位小数,3、选择四舍五入还是向上取,或者向下取
            floatAdd(arg1, arg2) //浮点数加法
            floatSub(arg1, arg2) //浮点数减法
            floatMul(arg1, arg2) //浮点数乘法
            floatDiv(arg1, arg2) //浮点数除法

2、使用big.js(https://www.npmjs.com/package/big.js

1、npm install --save big.js

2、import Big from 'big.js'

使用big.js运算的返回的是一个big实例,可链式调用,最终结果,使用toString()方法转为字符串进行页面渲染。

示例:(加减乘除的基本运用)

let  a = new Big(0.2);

let b = new Big(0.1);

a.add(b).toString()    //0.3

a.sub(b).toString()   //0.1

a.mul(b).toString()  //0.02

a.div(b).toString()      //2

猜你喜欢

转载自blog.csdn.net/Dong8508/article/details/80239869