Código
function tratarComissao(valor) {
// Casos nulos ou vazios
if (valor === null || valor === undefined || valor === "null" || valor === "") {
return 0;
}
// Se já for número
if (typeof valor === "number") {
return isNaN(valor) ? 0 : valor;
}
// Se for string
if (typeof valor === "string") {
let v = valor.trim();
if (v === "") return 0;
// Remove símbolos de moeda
v = v.replace(/[R$€£¥]/g, "").trim();
const pontos = (v.match(/\./g) || []).length;
const virgulas = (v.match(/,/g) || []).length;
// Se tiver ponto e vírgula, o último define o decimal
if (pontos > 0 && virgulas > 0) {
const ultimoPonto = v.lastIndexOf(".");
const ultimaVirgula = v.lastIndexOf(",");
if (ultimaVirgula > ultimoPonto) {
v = v.replace(/\./g, "").replace(",", "."); // formato BR
} else {
v = v.replace(/,/g, ""); // formato US
}
}
// Só vírgula
else if (virgulas > 0) {
if (virgulas === 1) {
const partes = v.split(",");
v = partes[1] && partes[1].length <= 2 ? v.replace(",", ".") : v.replace(/,/g, "");
} else {
v = v.replace(/,/g, "");
}
}
// Só ponto
else if (pontos > 0) {
if (pontos === 1) {
const partes = v.split(".");
if (partes[1] && partes[1].length > 2) {
v = v.replace(/\./g, "");
}
} else {
v = v.replace(/\./g, "");
}
}
// Remove tudo que não seja número, ponto ou sinal de menos
v = v.replace(/[^\d.-]/g, "");
const numero = parseFloat(v);
return isNaN(numero) ? 0 : numero;
}
// Qualquer outro tipo
return 0;
}
// Exemplo de uso:
const projected_commission = tratarComissao(flow.projected_commission);
return projected_commissionSaídas
- Resultado da execução do código acima
Descrição adicional
Relações
← Recebe de: 2-user-variables---salvar-variaveis-de-user
→ Envia para: 4-flow-variable--- projected-commission