Форматирование баланса криптовалют JS
Из бэкенда приходит баланс который может быть дробным или целым, вместе c параметром decimal количество символов после точки, в целой части числа форматирование делит сотни пробелом, в дробной части добавляет нули если decimal > длины дробного числа или обрезает если decumal < дробной части числа вот мое решение:
const formatCryptoBalance = (balance: number, decimal: number) => {
const balanceStr = String(balance)
let beforePoint = ''
let afterPoint = ''
if(balanceStr.indexOf('.') !== -1) {
beforePoint = balanceStr.slice(0, balanceStr.indexOf('.'))
afterPoint = balanceStr.slice(
balanceStr.indexOf('.') + 1,
balanceStr.length
)
if (afterPoint.length <= decimal) {
for (let i = 0; i < decimal - afterPoint.length; i++) {
afterPoint += '0'
}
}
if (afterPoint.length > decimal) {
afterPoint = afterPoint.slice(0, decimal)
}
} else {
beforePoint = String(balance)
for (let i = 0; i < decimal; i++) {
afterPoint += '0'
}
}
if(beforePoint !== '0'){
beforePoint = beforePoint.replace(/\B(?=(\d{3})+(?!\d))/g, ' ')
}
return `${beforePoint}.${afterPoint}`
}
Есть ли какой то более элегантный способ решения этой задачи?
Источник: Stack Overflow на русском