1000000一串数字,我们以什么样的方式呈现,在考虑样式不会溢出的情况下
两个解决方案
三位数隔开
// 三位数隔开function toThousandslsFilter (num) {return (+num || 0).toString().replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','))}
将数字格式化为KMB
// 将数字格式化为KMBfunction nFormatter (num, digits) {const si = [{ value: 1, symbol: '' },{ value: 1E3, symbol: 'K' },{ value: 1E6, symbol: 'M' },{ value: 1E9, symbol: 'G' },{ value: 1E12, symbol: 'T' },{ value: 1E15, symbol: 'P' },{ value: 1E18, symbol: 'E' }]const rx = /\.0+$|(\.[0-9]*[1-9])0+$/let ifor (i = si.length - 1; i > 0; i--) {if (num >= si[i].value) {break}}return (num / si[i].value).toFixed(digits).replace(rx, '$1') + si[i].symbol}
综合一下
/*** @description: 数字格式化* @param {number} num 数字* @param {number} ceil 小数* @param {boolean} unit 是否带单位* @return {number}*/import numeral from 'numeral'export function formatNum (num, ceil = 2, unit = false) {// const formater = numeral(num);let ruler = '0,0'if (ceil >= 1) {ruler = ruler + '.'for (let i = 0; i < ceil; i++) {ruler = ruler + '0'}}if (unit) {ruler = ruler + ' a'}const result = numeral(num).format(ruler)return unit ? result.toUpperCase() : result}
