Skip to main content

Olá pessoal, tudo jóia?


Utilizo a seguinte função para trabalhar com valores monetários em meus fluxos:


function formatMoneyBR(number = null, currency = true) {
if (number === null || number === "") return;
const format = currency
? {
style: "currency",
currency: "BRL"
}
: {
minimumFractionDigits: 2
};
return Number(number).toLocaleString("pt-BR", format);
}

Um tanto semelhante até com o que @fadoaglauss indica aqui:



Porém em alguns pontos do meu fluxo, por exemplo, onde executo este script


function run(detalhesViagem, hotelInfo, responseChoiceHotel) {
...
//Valor retornado pela API: 29415.284210526323
detalhesViagem.valorTotal = formatMoneyBR(responseChoiceHotel.data.valor_atualizado)
//valor retornado pelo script R$ 29.415,28 (fora do blip)
return JSON.stringify(detalhesViagem)
}

O valor é formatado corretamente no script, mas o Blip printa ele com o separador decimal invertido, onde ponto (.) virá vírgula (,) e vice-versa.


image

Está imagem é de outro ponto do fluxo, por isso o valor diferente, mas veja que a situação se repete.

Bom dia @Adriano_tsi !


A pergunta é um pouco antiga mas tive o mesmo problema então talvez a minha resposta ajude outras pessoas.

Para resolver o problema utilizei de um replace para trocar de volta os pontos pelas vírgulas.


O replace que usei é o primeiro das respostas daqui:



no seu código ficaria algo tipo:


 function formatMoneyBR(number = null, currency = true) {
if (number === null || number === "") return;
const format = currency
? {
style: "currency",
currency: "BRL",
}
: {
minimumFractionDigits: 2,
};
let value = Number(number).toLocaleString("pt-BR", format);
value = value.replace(/a,.]/g, function (m) {
return m === "," ? "." : ",";
});
return value;
}


Mas espero que já tenha resolvido 🙂


Comente