/** * 重写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