@devix-tecnologia/numero-por-extenso
Version:
Escreve números por extenso: normais, monetários e porcentagens.
43 lines • 1.98 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = porExtenso;
const common_js_1 = require("../common.js");
const casasDecimais_js_1 = __importDefault(require("../nomesExtenso/casasDecimais.js"));
/**
* Converte um número para sua representação por extenso, incluindo casas decimais nomeadas.
*
* @param numero O número (como número ou string) a ser convertido para extenso.
* @returns A representação por extenso do valor, com o nome das casas decimais.
*/
function porExtenso(numero) {
let numberStr = numero.toString().replace("-", "").split("."), numberBefore = numberStr[0] || "0", numberAfter = numberStr[1] || "";
let numberBeforeExtended = (numero < 0 ? "menos " : "") + (0, common_js_1.numberInFull)(Number(numberBefore)), numberAfterExtended = "";
if (parseInt(numberAfter)) {
numberAfter = numberAfter.replace(/0+$/g, ""); // Remove trailing zeros
numberAfterExtended = ` vírgula ${(0, common_js_1.numberInFull)(+numberAfter)}`;
let casaDecimal = descobreNomeCasaDecimal(numberAfter);
if (casaDecimal)
numberAfterExtended += ` ${casaDecimal}`;
}
return numberBeforeExtended + numberAfterExtended;
}
/**
* Determina o nome da casa decimal com base no número de dígitos após a vírgula.
*
* @param numberAfter A parte decimal do número como string.
* @returns O nome apropriado da casa decimal, ajustado para singular ou plural.
*/
function descobreNomeCasaDecimal(numberAfter) {
let casaDecimal = casasDecimais_js_1.default[numberAfter.length - 1] || "";
// plural
if (casaDecimal && parseInt(numberAfter) !== 1) {
let aux = casaDecimal.split(" ");
aux[0] = aux[0] + "s";
casaDecimal = aux.join(" ");
}
return casaDecimal;
}
//# sourceMappingURL=normal.js.map