@koalarx/utils
Version:
Biblioteca com validadores, conversores e abstrações de algumas problemáticas
83 lines (82 loc) • 3.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.KlNumber = void 0;
exports.maskCoin = maskCoin;
exports.randomNumber = randomNumber;
class KlNumber extends Number {
/**
* Gera um número aleatório entre os valores mínimo e máximo especificados.
* @param min Valor mínimo do intervalo.
* @param max Valor máximo do intervalo.
* @returns Uma nova instância de `KlNumber` com o número aleatório gerado.
* @throws Erro se o valor mínimo for maior que o valor máximo.
*/
random(min, max) {
if (min > max) {
throw new Error('The min value cannot be greater than the max');
}
return new KlNumber(Math.floor(Math.random() * (max - min + 1)) + min);
}
/**
* Formata o número como uma moeda, utilizando prefixo, separadores de milhar e decimal.
* @param prefix Prefixo da moeda (ex.: 'R$').
* @param thousands Separador de milhar (ex.: '.').
* @param decimal Separador decimal (ex.: ',').
* @param decimalCount Número de casas decimais (padrão: 2).
* @returns Uma string representando o número formatado como moeda.
*/
maskCoin(prefix = 'R$', thousands = '.', decimal = ',', decimalCount = 2) {
const coin = this.formatMoney(this.toNumber(), decimalCount, decimal, thousands);
return `${prefix} ${coin}`;
}
/**
* Converte a instância de `KlNumber` para um número primitivo.
* @returns O valor numérico da instância.
*/
toNumber() {
return this.valueOf();
}
/**
* Formata um número com separadores de milhar e casas decimais.
* @param amount Valor numérico a ser formatado.
* @param decimalCount Número de casas decimais (padrão: 2).
* @param decimal Separador decimal (ex.: '.').
* @param thousands Separador de milhar (ex.: ',').
* @returns Uma string representando o número formatado.
*/
formatMoney(amount, decimalCount = 2, decimal = '.', thousands = ',') {
decimalCount = Math.abs(decimalCount);
decimalCount = isNaN(decimalCount) ? 2 : decimalCount;
const negativeSign = Number(amount) < 0 ? '-' : '';
const result = Math.abs(Number(amount) || 0).toFixed(decimalCount);
const i = parseInt(result, 10).toString();
const j = i.length > 3 ? i.length % 3 : 0;
return (negativeSign +
(j ? i.substring(0, j) + thousands : '') +
i.substring(j).replace(/(\d{3})(?=\d)/g, '$1' + thousands) +
(decimalCount
? decimal +
Math.abs(Number(amount) - Number(i))
.toFixed(decimalCount)
.slice(2)
: ''));
}
}
exports.KlNumber = KlNumber;
/**
* Função utilitária para formatar um número como moeda.
* @param value Valor numérico a ser formatado.
* @returns Uma string representando o número formatado como moeda.
*/
function maskCoin(value) {
return new KlNumber(value).maskCoin();
}
/**
* Função utilitária para gerar um número aleatório.
* @param min Valor mínimo do intervalo (padrão: 0).
* @param max Valor máximo do intervalo (padrão: 99999999999).
* @returns Um número aleatório dentro do intervalo especificado.
*/
function randomNumber(min, max) {
return new KlNumber().random(min ?? 0, max ?? 99999999999).toNumber();
}