/**
     * 重写toFixed---四舍六入五取偶
     * @param {*} length 截取长度
     * @param {*} num 截取数值
     * https://blog.csdn.net/qq_38523017/article/details/83989543
     */
    Vue.prototype.$toFixed = function (length, inputNum) {
      if (inputNum === null) inputNum = 0;
      var carry = 0; //存放进位标志
      var num, multiple; //num为原浮点数放大multiple倍后的数,multiple为10的length次方
      var str = inputNum + ""; //将调用该方法的数字转为字符串
      var dot = str.indexOf("."); //找到小数点的位置
      if (dot != -1 && str.substr(dot + length + 1, 1) >= 5) {
        carry = 1; //找到要进行舍入的数的位置,手动判断是否大于等于5,满足条件进位标志置为1
      }
      multiple = Math.pow(10, length); //设置浮点数要扩大的倍数
      let multiply = this.$numMulti(inputNum, multiple); //小数相乘精度问题
      num = Math.floor(multiply) + carry; //去掉舍入位后的所有数,然后加上我们的手动进位数
      var result = num / multiple + ""; //将进位后的整数再缩小为原浮点数

      /*
       * 处理进位后无小数
       */
      dot = result.indexOf(".");
      if (dot < 0) {
        result += ".";
        dot = result.indexOf(".");
      }

      /*
       * 处理多次进位
       */
      var len = result.length - (dot + 1);
      if (len < length) {
        for (var i = 0; i < length - len; i++) {
          result += 0;
        }
      }
      return result;
    };

 

    //乘法丢失精度问题
    Vue.prototype.$numMulti = function (num1, num2) {
      var baseNum = 0;
      try {
        baseNum += num1.toString().split(".")[1].length;
      } catch (e) {}
      try {
        baseNum += num2.toString().split(".")[1].length;
      } catch (e) {}
      return (
        (Number(num1.toString().replace(".", "")) *
          Number(num2.toString().replace(".", ""))) /
        Math.pow(10, baseNum)
      );
    };
    /**

 

参考链接:

 https://blog.csdn.net/qq_38523017/article/details/83989543
posted on 2021-01-30 18:12  阿梅M  阅读(903)  评论(0编辑  收藏  举报