1000000一串数字,我们以什么样的方式呈现,在考虑样式不会溢出的情况下
两个解决方案
三位数隔开
// 三位数隔开
function toThousandslsFilter (num) {
return (+num || 0).toString().replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','))
}
将数字格式化为KMB
// 将数字格式化为KMB
function 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 i
for (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
}