Solucionado (ver solução)
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");
}