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(/[,.]/g, function (m) {
        return m === "," ? "." : ",";
    });
    return value;
}

Mas espero que já tenha resolvido 🙂