Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
10
respostas

A média exibe com . e não com vírgula mesmo entrando com dados em float e usando o replace

<meta charset="UTF=8">
<script>
    function pulaLinha(){
        document.write("<br>");
    }
    function mostra(frase){
        document.write(frase);
        pulaLinha();
    }
    var numeroEventos = parseInt(prompt("Digite o número de eventos: "));
    var numero = 1;
    var totalGasto = 0;
    if(numeroEventos < 6){
        while(numero <= numeroEventos){
            var gasto = parseFloat(prompt("Quanto foi gasto para este evento: ")); // tentei com o replace aceita dados com vírgulas
            totalGasto = totalGasto + gasto;
            numero++;
            }
        var media = totalGasto/numeroEventos;
        mostra("A media de gasto nós eventos foi R$ : " + media.toFixed(2)); // porém aqui exibe com . no lugar da vírgula
    }else{
        mostra("Posso realizar de 1 a 5 eventos por mês");
    }
</script>
10 respostas

Oi, Ricardo. É usado o ponto para separar o decimal. Esse é o padrão americano.

É assim para todas as linguagens de programação

Para modificar, você pode usar toLocaleString()

Exemplo:


mostra("A media de gasto nós eventos foi: " + media.toLocaleString('pt-BR', { style: 'currency', currency: 'BRL'}));

Artigos sobre o assunto

Formatando números e moedas com toLocaleString()

Formatando números no JavaScript

Consigo usar o .toFixed(); junto para delimitar as casas decimais? Caso sim como ficaria?

mostra("A media de gasto nós eventos foi: " + media.toLocaleString('pt-BR', { style: 'currency', currency: 'BRL'}).toFixed(2));

mostra("A media de gasto nós eventos foi R$ : " + media.toLocaleString("pt-BR", {style: "currency", currency:"BRL", minimumFractionDigits: 2}));

Deixei aqui para ajudar os próximos como retornar o valor com , exemplo R$ 300,54 no lugar de R$ 300.54. Como delimitar o número de casas décimais para aceitar apenas 2 casas após a vírgula, exemplo R$ 300,454 aparecer R$ 300,45. E como aceitar a vírgula no lugar de ponto, exemplo você digitou o valor do evento 200.00 com o dentro do parseFloat .replace(",",".") - parseFloat(prompt("Quanto foi gasto para este evento: ").replace(",",".")); ele aceita que digite com vírgula exemplo 200,00. Também coloquei um if para aceitar somente um número x de eventos por dias e um else para dizer se o número x de eventos digitados está dentro do estabelecido no caso pode fazer no mínimo 1 evento e no máximo 5.

Desde já agradeço o Luís Dias por sanar minha dúvida e os links que ajudaram muito.

solução!

Não use o 'toFixed()'

Exemplos:

let media= 10.1579

// currency é a moeda local com duas casas decimais
document.writeln( media.toLocaleString('pt-BR', { style: 'currency', currency: 'BRL' }) );
// saída = R$ 10,16

// fixando a 2 casas decimais
document.writeln( media.toLocaleString('pt-BR', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) );
// saída = 10,16

// Sem parâmetros, são 3 casas decimais
document.writeln( media.toLocaleString() );
// saída = 10,158
var numeroEventos = parseInt(prompt("Digite o número de eventos: "));
var numero = 1;
var totalGasto = 0;
if(numeroEventos < 6){
    while(numero <= numeroEventos){
        var gasto = parseFloat(prompt("Quanto foi gasto para este evento: ").replace(",","."));
        totalGasto = totalGasto + gasto;
        numero++;
        }
    var media = totalGasto/numeroEventos;
    mostra("A media de gasto nós eventos foi R$ : " + media.toLocaleString("pt-BR", {style: "currency", currency:"BRL", minimumFractionDigits: 2}));
}else{
    mostra("Posso realizar de 1 a 5 eventos por mês");
}