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