- A+
所属分类:Web前端
1、数字格式化
JS版-直接写到原型链上
/** * @author: silencetea * @name: * @description: 数字格式化,默认每三位用英文逗号分隔 * @param {number} number 要格式化的数字 * @param {number} decimals 保留几位小数,默认不保留小数 * @param {string} dec_point 小数点符号,默认“.” * @param {string} thousands_sep 千分位符号,默认英文逗号 * @return {*} */ Number.Format = (number, decimals, dec_point, thousands_sep) => { number = (number + "").replace(/[^0-9+-Ee.]/g, ""); let n = !isFinite(+number) ? 0 : +number, prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), sep = typeof thousands_sep === "undefined" ? "," : thousands_sep, dec = typeof dec_point === "undefined" ? "." : dec_point, s = "", toFixedFix = function (n, prec) { let k = Math.pow(10, prec); return "" + Math.ceil(n * k) / k; }; s = (prec ? toFixedFix(n, prec) : "" + Math.round(n)).split("."); let re = /(-?d+)(d{3})/; while (re.test(s[0])) { s[0] = s[0].replace(re, "$1" + sep + "$2"); } // 小数点后位数不够补0,需要补0,放开下方被注释的代码即可 // if ((s[1] || "").length < prec) { // s[1] = s[1] || ""; // s[1] += new Array(prec - s[1].length + 1).join("0"); // } return s.join(dec); };
JS版-封装方法
/** * @author: silencetea * @name: numberFormat * @description: 数字格式化,默认每三位用英文逗号分隔 * @param {number} number 要格式化的数字 * @param {number} decimals 保留几位小数,默认不保留小数 * @param {string} dec_point 小数点符号,默认“.” * @param {string} thousands_sep 千分位符号,默认英文逗号 * @return {*} */ const numberFormat = ( number, decimals = 0, dec_point = '.', thousands_sep = ',', ) => { let numberStr = (number + '').replace(/[^0-9+-Ee.]/g, ''); let n = !isFinite(+numberStr) ? 0 : +numberStr, prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), sep = typeof thousands_sep === 'undefined' ? ',' : thousands_sep, dec = typeof dec_point === 'undefined' ? '.' : dec_point, s, toFixedFix = function (n, prec) { let k = Math.pow(10, prec); return '' + Math.ceil(n * k) / k; }; s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.'); let re = /(-?d+)(d{3})/; while (re.test(s[0])) { s[0] = s[0].replace(re, '$1' + sep + '$2'); } // 小数点后位数不够补0,不需要补0可以注释掉 if ((s[1] || '').length < prec) { s[1] = s[1] || ''; s[1] += new Array(prec - s[1].length + 1).join('0'); } return s.join(dec); };
TS版-封装方法
/** * @author: silencetea * @name: numberFormat * @description: 数字格式化,默认每三位用英文逗号分隔 * @param {number} number 要格式化的数字 * @param {number} decimals 保留几位小数,默认不保留小数 * @param {string} dec_point 小数点符号,默认“.” * @param {string} thousands_sep 千分位符号,默认英文逗号 * @return {*} */ const numberFormat = ( number: number, decimals: number = 0, dec_point: string = '.', thousands_sep: string = ',', ) => { let numberStr = (number + '').replace(/[^0-9+-Ee.]/g, ''); let n = !isFinite(+numberStr) ? 0 : +numberStr, prec = !isFinite(+decimals) ? 0 : Math.abs(decimals), sep = typeof thousands_sep === 'undefined' ? ',' : thousands_sep, dec = typeof dec_point === 'undefined' ? '.' : dec_point, s, toFixedFix = function (n: number, prec: number) { let k = Math.pow(10, prec); return '' + Math.ceil(n * k) / k; }; s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.'); let re = /(-?d+)(d{3})/; while (re.test(s[0])) { s[0] = s[0].replace(re, '$1' + sep + '$2'); } if ((s[1] || '').length < prec) { s[1] = s[1] || ''; s[1] += new Array(prec - s[1].length + 1).join('0'); } return s.join(dec); };
2、字节进级换算
JS版-封装方法
/** * @author: silencetea * @name: * @description: 字节进级换算 * @param {number} number 要换算的数字 * @param {string} unit 数字单位,默认KB * @param {number} lev 数字超过多少位进行换算,默认5 * @param {Array<string>} sizes 数组,进位的各级单位 * @return {*} */ Number.GBToSize = (number, unit='KB', lev = 5, sizes = ["KB", "MB" ,"GB", "TB", "PB", "EB", "ZB", "YB"]) => { if (typeof number !== 'number') { return {}; } let num = number, i = sizes.indexOf(unit); while (num.toString().split('.')[0].length > lev) { num = Math.round(num / 1024); i++; } return { num: num, unit: sizes[i], }; };
3、个、万、十万等换算
JS版-封装方法
/** * @author: silencetea * @name: orderOfMagnitudeConversion * @description: 个、万、十万等换算 * @return {*} * @param {number} number 要换算的数字 * @param {string} unit 传入的数字单位,默认无,即“个” */ const orderOfMagnitudeConversion = ( number, unit = '' ) => { let k = [1, 10000, 1000], sizes = ['', '万', '千万'], num = number, i = sizes.indexOf(unit); while ((num.toString() + sizes[i]).length > 6) { if (i >= k.length - 1) { // console.log("break", num.toString() + sizes[i]) break; } else { i++; num = Math.round(num / k[i]); } } return { num: numberFormat(num), unit: sizes[i] }; };
4、数字数组排序,默认从小到大
TS版-封装方法
/** * @author: silencetea * @name: sortNumberArray * @description: 数字数组排序,默认升序:从小到大 * @param {Array<number>} data * @param {string} sortType 排序方式,asc升序,desc降序 * @return {*} */ const sortNumberArray = ( data: Array<number>, sortType: string = "asc" ) => { if (sortType === "asc") { data.sort((x: number, y: number) => { return x - y; }); } else if (sortType === "desc") { data.sort((x: number, y: number) => { return y - x; }); } return data; };
5、日期格式化,调用方式,new Date(datevalue).Format('yyyy-MM-dd HH:mm:ss'),或者new Date().Format('yyyy-MM-dd')
JS版-直接写到原型链上
/** * @author: silencetea * @name: sortNumberArray * @description: 数字数组排序,默认升序:从小到大 * @param {any} fmt 要以何种格式格式化 * @return {*} */ Date.prototype.Format = (fmt) => { let o = { 'M+': this.getMonth() + 1, 'd+': this.getDate(), 'H+': this.getHours(), 'm+': this.getMinutes(), 's+': this.getSeconds(), 'S+': this.getMilliseconds() }; //因为date.getFullYear()出来的结果是number类型的,所以为了让结果变成字符串型,下面有两种方法: if (/(y+)/.test(fmt)) { //第一种:利用字符串连接符“+”给date.getFullYear()+'',加一个空字符串便可以将number类型转换成字符串。 fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length)); } for (var k in o) { if (new RegExp('(' + k + ')').test(fmt)) { //第二种:使用String()类型进行强制数据类型转换String(date.getFullYear()),这种更容易理解。 fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(String(o[k]).length))); } } return fmt; };
TS版-封装方法
/** * @author: silencetea * @name: sortNumberArray * @description: 数字数组排序,默认升序:从小到大 * @param {any} fmt 要以何种格式格式化 * @param {any} datetime 要格式化的日期时间 * @return {*} */ const datetimeFormat = (fmt: any, datetime?:any) => { let _this = datetime ? new Date(datetime) : new Date(); let o:any = { 'M+': _this.getMonth() + 1, 'd+': _this.getDate(), 'H+': _this.getHours(), 'm+': _this.getMinutes(), 's+': _this.getSeconds(), 'S+': _this.getMilliseconds() }; //因为date.getFullYear()出来的结果是number类型的,所以为了让结果变成字符串型,下面有两种方法: if (/(y+)/.test(fmt)) { //第一种:利用字符串连接符“+”给date.getFullYear()+'',加一个空字符串便可以将number类型转换成字符串。 fmt = fmt.replace(RegExp.$1, (_this.getFullYear() + '').substr(4 - RegExp.$1.length)); } for (let k in o) { if (new RegExp('(' + k + ')').test(fmt)) { //第二种:使用String()类型进行强制数据类型转换String(date.getFullYear()),这种更容易理解。 fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(String(o[k]).length))); } } return fmt; };