Ir ao conteúdo

Posts recomendados

Postado
   <script>
      let conta = prompt("Informe o valor da conta")
      let clientes = prompt("Informe o número de pessoas que irão pagar")
      let valorPorCliente = parseFloat(conta) / Number(clientes).toFixed(2)
      console.log(conta)
      console.log(valorPorCliente)
      alert("O valor que cada pessoa deve pagar é de: R$"+valorPorCliente)
    </script>

Boa tarde, estou tentando fazer um algoritmo em JS que lê o valor de uma conta, o número de pessoas que vai pagar, e diz quanto cada uma terá que pagar.

Só que na hora de mostrar a parte final, os alerts vem sem a parte decimal, ou com o resultado diferente de uma calculadora, por exemplo, fiz um teste assim:

conta - 79,81

pessoas - 4

valor p/ pessoa - 19,75

============

esse era o resultado que o alert retornava, mas até em uma calculadora ciêntifica a resposta era 19.95. Porque isso ocorre?

  • Curtir 1
  • Solução
Postado

O problema é que na hora de converter a String para Float o JavaScript espera encontrar um ponto e não uma vírgula como separador decimal, então ele considera que você está passando 2 valores separados por uma vírgula e converte apenas o primeiro. A forma mais simples de resolver esse problema é substituir a vírgula por um  ponto.

parseFloat(conta.replace(',','.'))

 

  • Moderador
Postado

@Samuel Fortes Brasil Basicamente faz um replace da virgula pelo ponto.. ou seja quando você digitar 79,81   a virgula é trocara para ponto.  Isso porque a operação com números com decimais, exige o ponto.

 

Você deve colocar essa sintaxe na variável  valorPorCliente

 

 let conta = prompt("Informe o valor da conta")
 let clientes = prompt("Informe o número de pessoas que irão pagar")
 let valorPorCliente = parseFloat(conta.replace(',','.')) / Number(clientes).toFixed(2)
      
 console.log(conta)
 console.log(valorPorCliente)
 alert("O valor que cada pessoa deve pagar é de: R$"+valorPorCliente.toFixed(2))

 

 

Também inclui o toFixed(2) na variável valorPorCliente dentro do alert...  porque assim vai limitar o valor decimal em duas casas... por exemplo 

sem a função retornaria:  19.9525    

com a função retornaria: 19.95

 

 

Existe um plugin jQuery que trata das formas monetárias bem interessante:

https://plentz.github.io/jquery-maskmoney/

  • Curtir 1
Postado

@Samuel Fortes Brasil replace() assim como toFixed() é um método, no caso de replace(',', '.') o primeiro argumento é o caractere que vai ser substituído e o segundo é o caractere de substituição.

 

Para testar eu havia modificado essa linha:

let valorPorCliente = parseFloat(conta) / Number(clientes).toFixed(2)

para:

let valorPorCliente = (parseFloat(conta.replace(',','.')) / Number(clientes)).toFixed(2);

 

Se não colocar o cálculo entre parênteses, toFixed(2) vai ser aplicado apenas ao segundo valor antes do cálculo, e não sobre o resultado, e não teria sentido converter clientes para um número já que toFixed() retorna uma string, que no caso seria convertida novamene para um número de forma atuomática para se fazer o cálculo.

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!