/** * 四舍六入 * @param {number} num 数值 * @param {int} digits 小数精度 * @returns */ ToFixed: function (num, digits) { var _this = this; if (digits > 20 || digits < 0) return num; if (isNaN(num)) return NaN; if (!_this.IsNum(num)) return 0; var stringNumber = num + ''; //stringNumber = stringNumber.replace(' ', ''); //stringNumber = stringNumber.replace(',', ''); // 判断是否有小数点 if (stringNumber.indexOf('.') == -1) stringNumber += '.'; // 分别取出整数位与小数位 var integerDigit = stringNumber.split('.')[0], decimal = stringNumber.split('.')[1]; integerDigit = integerDigit.split(''); decimal = decimal.split(''); var l = decimal.length; if (0 == digits) return integerDigit.join(''); if (l == digits) return stringNumber; if (l < digits) { // 计算数值并补齐后导零 var difference = digits - l; decimal = decimal.concat('00000000000000000000'.substring(0, difference)); return integerDigit.concat('.').concat(decimal).join(''); }; // 判断是否为负数 var minus = ''; if (integerDigit[0] == '-') { minus = '-'; integerDigit[0] = '0'; } else { integerDigit.unshift('0'); }; // 处理小数超出位数 if (parseInt(decimal[digits]) == 5) { for (var i = (digits + 1); i < l; i++) { if (parseInt(decimal[i]) > 0) { decimal[digits] = 6; break }; }; }; decimal.splice(digits + 1); allDigit = integerDigit.concat(decimal).reverse(); l = allDigit.length; for (var i = 0; i < l; i++) { allDigit[i] = parseInt(allDigit[i]); }; // 累计进位 var carry = (allDigit[1] % 2 != 0); if (allDigit[0] < 5) carry = false; if (allDigit[0] > 5) carry = true; for (var i = 1; i < l; i++) { if (!carry) { // 删除最后0位 allDigit.pop(); break; }; allDigit[i]++; carry = (allDigit[i] > 9); if (carry) allDigit[i] = 0; }; // 删除第一位判断位 allDigit.shift(); // 插入小数点 allDigit.splice(digits, 0, '.'); // 插入负号 allDigit.push(minus); // 反转并返回字符串 return allDigit.reverse().join(''); },