JS加减乘除位移方法封装

常用加减乘除等方法汇总

直接上代码,逻辑简单,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Math Methods</title>
</head>
<body>
    <div id="div">加减乘除位移方法汇总</div>
<script type="application/javascript">
    /**
     * 向右移动小数点 ,相当于乘10的_pointcount次幂
     * @param _number 操作的数字
     * @param _pointcount 向右移动的位数
     * @returns 移动以后的数字(number类型)
     */
    var moveRight = function (_number, _pointcount) {
        if (Number(_number) !== Number(_number)) {
            return _number;
        }
        var flag = 1;
        if (_number < 0) {
            flag = -1;
            _number = _number * -1;
        }
        var numStr = _number.toString();
        var strArr = numStr.split(".");
        var rightStr = strArr.length > 1 ? strArr[1] : "";
        //在不足移动的位数后补0;
        if (rightStr.length < _pointcount) {
            var addZero = [];
            for (var i = rightStr.length; i < _pointcount; i++) {
                addZero.push("0");
            }
            rightStr = rightStr + addZero.join("");
        }
        return Number(strArr[0] + rightStr.substring(0, _pointcount) + "." + rightStr.substr(_pointcount)) * flag;
    };
    /**
     * 向左移动小数点,相当于_number除以10的_pointcount次幂
     * @param _number 操作的数字
     * @param _pointcount 向左移动的位数
     * @returns 移动以后的数字(number类型)
     */
    var moveLeft = function (_number, _pointcount) {
        //判断是否为数字,非数字直接返回本身
        if (Number(_number) !== Number(_number)) {
            return _number;
        }
        var flag = 1;
        if (_number < 0) {
            flag = -1;
            _number = _number * -1;
        }
        //number转换为string ,方便后续操作。
        var numStr = _number.toString();
        //按照小数点分隔字符串,
        var strArr = numStr.split(".");
        var num = 0, zeroArr = [];
        //生成移动位数+1的0 ,补到分隔后的第一个字符串中,兼容0.XXX的情况。开头多余的零会在调用Number方法时去掉。
        while (num < _pointcount + 1) {
            zeroArr.push("0");
            num++;
        }
        var leftStr = zeroArr.join("") + strArr[0];
        var leftArr = leftStr.split("")
        //插入移动后的小数点。
        leftArr.splice((leftStr.length - _pointcount), 0, '.');
        var result = leftArr.join("");
        //拼接原始值小数点后的数字
        if (strArr.length > 1) {
            result += strArr[1];
        }
        return Number(result) * flag;
    };
    /**
     * 加法
     * @param _num1
     * @param _num2
     * @param precision 精度
     * @returns {*}
     */
    var add = function (_num1, _num2, precision) {
        if (!precision) {
            precision = 2;
        }
        return moveLeft(moveRight(_num1, precision) + moveRight(_num2, precision), precision)
    };
    /**
     * 减法
     * @param minuend
     * @param reduction
     * @returns {*}
     */
    var reduce = function (minuend, reduction, precision) {
        if (!precision) {
            precision = 2;
        }
        return moveLeft(moveRight(minuend, precision) - moveRight(reduction, precision), precision)
    };
    /**
     * 乘法
     * @param _num1
     * @param _num2
     * @returns {number}
     */
    var multiplication = function (_num1, _num2, precision) {
        if (!precision) {
            precision = 2;
        }
        return moveLeft(moveRight(_num1, precision) * moveRight(_num2, precision), precision * 2)
    };
    /**
     * 除法
     * @param _num1 被除数
     * @param _num2 除数
     * @param precision 精度 整形,几位小数
     * @returns {number}
     */
    var division = function (_num1, _num2, precision) {
        if (!precision) {
            precision = 2;
        }
        return moveRight(_num1, precision) / moveRight(_num2, precision);
    };
    console.log(moveRight(0.9999999,3));
    console.log(moveLeft(88888888888,2));
    console.log(add(1.01,7.079,8));
    console.log(reduce(8.01,1,2));
    console.log(multiplication(1,8.88,2));
    console.log(division(16,2,2))
</script>
</body>
</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值