数字转千分位字符串
import { numberFormat } from "format.ts";
numberFormat(2000000);
numberFormat(2000000, 0);
numberFormat();
numberFormat('20f000,00');
千分位字符串转数字
import { millageToNumber} from "format.ts";
millageToNumber('12,212,2.1');
millageToNumber('2,122,122.1');
具体方法如下
export function isString(obj: any) {
return Object.prototype.toString.call(obj) === "[object String]";
}
export function replaceToNumberStr(str: string|number, exclude = true) {
str = String(str);
if (exclude) return str.replace(/[^0-9.]/ig,"");
return str.replace(/[^0-9]/ig,"")
}
export function toFixedFix(n: number|string, decimals = 2) {
const reg = new RegExp('^[0-9]+(?:.[0-9]{0,'+ decimals +'})?')
const number: any = String(n).match(reg);
return '' + number;
}
export function toFixedNumber(number: number|string, decimals = 2) {
const s: string[] = (decimals ? toFixedFix(number, decimals) : '' + Math.round(Number(number))).split('.');
if ((s[1] || '').length < decimals) {
s[1] = s[1] || '';
s[1] += new Array(decimals - s[1].length + 1).join('0');
}
return s.join('.');
}
export function numberFormat(number: number|string, decimals = 2, dec_point = '.', thousands_sep = ',', zero_format = '0') {
if (!number) {
if (zero_format === '0') {
return Number(zero_format).toFixed(decimals);
} else {
return zero_format;
}
}
let isNeg = false;
if (String(number).startsWith('-')) isNeg = true;
if (isString(number)) {
number = replaceToNumberStr(number);
} else {
number = Math.abs(Number(number));
}
number = (number + '').replace(/[^0-9+-Ee.]/g, '');
const 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;
const s: string[] = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
const 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 (isNeg ? '-' : '') + s.join(dec);
}
export function millageToNumber(number: number|string, decimals = 2, zero_format = '-') {
if (!number || number === zero_format) return 0;
if (isString(number)) {
number = replaceToNumberStr(number);
number = toFixedNumber(number, decimals);
}
return number;
}