• toFixed —— 将数值四舍五入为指定小数位数的数字


    一、方法

    function toFixed(number, n) {
    	let numberStr = number + "";
    	let reg = /^(-|+)?(d+(.d*)?|.d+)$/i;
    	if (!reg.test(numberStr)) {
    		console.error('输入的数字格式不对');
    		return;
    	}
    	let sign = numberStr.charAt(0) === '-' ? (numberStr = numberStr.slice(1), -1) : 1; // 判断是否是负数
    	let pointIndex = numberStr.indexOf("."); // 记录小数点的位置
    	if (pointIndex > -1) {
    		numberStr = numberStr.replace(".", "");
    	} else { // 没有小数点直接添加补0;
    		numberStr += ".";
    		numberStr += new Array(n).join('0');
    		return numberStr;
    	}
    	let numberArray = numberStr.split(""); //转成数组
    	let len = numberArray.length;
    	let oldPointNum = len - pointIndex; // 获取原数据有多少位小数
    	if (oldPointNum < n) { // 要保留的小数点比原来的要大,直接补0
    		while (n - oldPointNum > 0) {
    			numberArray.push(0);
    			n--;
    		}
    	} else if (oldPointNum > n) { // 模拟四舍五入
    		let i = oldPointNum - n; // 从倒数第i个数字开始比较
    		let more = numberArray[len - i] >= 5 ? true : false;
    		while (more) {
    			i++;
    			more = +numberArray[len - i] + 1 === 10 ? true : false; // 进位后判断是否等于10,是则继续进位
    			numberArray[len - i] = more && i !== (len + 1) ? 0 : +numberArray[len - i] + 1; // 其他位置的数字进位直接变成0,第一位的例外
    		}
    		numberArray.length = len - (oldPointNum - n); // 截取多余的小数
    	}
    	numberArray.splice(pointIndex, 0, ".");
    	return sign === -1 ? '-' + numberArray.join("") : numberArray.join("");
    }
    

    二、使用

    alert(toFixed(0.356, 2));   // 0.36
    alert(toFixed(-5.86578, 1));   // -5.9
    alert(toFixed(500, 2));   // 500.0
  • 相关阅读:
    Golang里边的map变量是什么?
    Golang map的底层实现
    方法和函数的区别
    Golang 对 对象和指针 的理解
    React 部分
    前端开发概述、html、css基础
    服务器核心知识
    常用模块8.7
    2017.8.2迭代器和生成器
    2017.7.18可变/不可变类型,符号运算及其流程控制
  • 原文地址:https://www.cnblogs.com/xulinjun/p/14311737.html
Copyright © 2020-2023  润新知