1、數字格式化 JS版-直接寫到原型鏈上 /** * @author: silencetea * @name: * @description: 數字格式化,預設每三位用英文逗號分隔 * @param {number} number 要格式化的數字 * @param {number} decimals ...
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;
};
本文鏈接:https://www.cnblogs.com/xsilence/p/16382118.html
我的個人博客地址:http://www.cnblogs.com/xsilence/歡迎轉載,但希望您註明轉載出處並給出原文連接