<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?
tente user o parseFloat direto no input e nao dps, ja q dps do valor ser guardado como int, n tem mais oq fzr, ou seja, sempre trate os formatos direto no input, caso queira algo diferente de int
A solução é relativamente simples, troque , por .:
parseFloat(conta.replace(',','.'))
Mas aí você vai ter outro problema, toFixed é chamado em Number(clientes) e não no resultado da divisão, essa precisa por a divisão entre parêntesis pra funcionar:
<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.replace(',','.')) / Number(clientes)).toFixed(2)
console.log(conta)
console.log(valorPorCliente)
alert("O valor que cada pessoa deve pagar é de: R$"+valorPorCliente)
</script>
falei a conta inteira amigo, o resultado da conta inteira tem que ser passado a float, desse jeito
<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>
porque o resultado da conta inteira vai ser o decimal, entende? se vc passar somente a “conta”, somente “conta” vai ser um float, logo dps que o calculo for feito ele volta a ser um “int” q 'e o padrao do js
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<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.replace(",",".") / Number(clientes)).toFixed(2)
console.log(conta)
console.log(valorPorCliente)
alert("O valor que cada pessoa deve pagar é de: R$"+valorPorCliente.replace(".",","))
</script>
<title>Document</title>
</head>
<body>
</body>
</html>
O código final ficou assim! O método de substituição de vírgula por pontos funciona e acredito que seja o mais correto a se utilizar!
Não é só a substituição da vírgula por ., antes de copiar a resposta é interessante ler o comentário todo, apenas com o replace, o seu código ainda daria a resposta errada, tinha 2 erros um de sanitização (o replace) e um de lógica (onde estava usando o toFixed)
Maninho, eu li, fica tranquilo. Já testei esse código e tá tudo certo nele.
toFixed tá sendo chamado em Valor por Cliente e não no let clientes.
É o valor por cliente que precissa dessa formatação.