Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Calculando a media errada - Javascript

Olá pessoal, sou novo aqui no Alura e se eu criei um tópico errado peço desculpas. Bom, fiz as primeiras lições do curso de javascript e para aprender mais resolvi mudar as informações da tabela, porem no calculo que eu faço da media ta dando valor errado, por exemplo na tabela esta nota1 - 10 e a nota2 - 5 e o resultado aparece 52.5. O que eu estou fazendo de errado? Obrigado.

var aluno = document.querySelector("#primeiro-aluno");

var tdNota1 = aluno.querySelector(".info-nota1");
var num1 = tdNota1.textContent;

var tdNota2 = aluno.querySelector(".info-nota2");
var num2 = tdNota2.textContent;

var media = (num1 + num2)/2;

console.log(media);
5 respostas

Oi Guilherme,

Tenta confirmar qual valor tem nesses dois elementos. A conta da média está correta. Se ainda assim não encontrar, coloca seu html aqui pra gente ver =]

meu código html esta assim.

<section class="container">
    <h2>Meus alunos</h2>
        <table>
            <thead>
                <tr>
                    <th>Nome</th>
                    <th>Nota 1</th>
                    <th>Nota 2</th>
                    <th>Media da sala</th>
                    <th>Media final</th>
                </tr>
            </thead>
        <tbody id="tabela-alunos">
        <tr class="alunos" id="primeiro-aluno">
            <td class="info-nome">Paulo</td>
                    <td class="info-nota1">10</td>
                    <td class="info-nota2">5</td>
                    <td class="info-mediaSala">6</td>
                    <td class="info-mediaFinal">0</td>
        </tr>

        <tr class="alunos" >
            <td class="info-nome">João</td>
            <td class="info-nota1">5.5</td>
            <td class="info-nota2">10</td>
            <td class="info-mediaSala">6</td>
            <td class="info-mediaFinal">0</td>
        </tr>

        <tr class="alunos" >
            <td class="info-nome">Erica</td>
            <td class="info-nota1">8</td>
            <td class="info-nota2">7.5</td>
            <td class="info-mediaSala">6</td>
            <td class="info-mediaFinal">0</td>
        </tr>

        <tr class="alunos">
            <td class="info-nome">Douglas</td>
            <td class="info-nota1">10</td>
            <td class="info-nota2">10</td>
            <td class="info-mediaSala">6</td>
            <td class="info-mediaFinal">0</td>
        </tr>

        <tr class="alunos" >
            <td class="info-nome">Tatiana</td>
            <td class="info-nota1">10</td>
            <td class="info-nota2">2.25</td>
            <td class="info-mediaSala">6</td>
            <td class="info-mediaFinal">0</td>
        </tr>
        </tbody>
            </table>
            </section>
        </main>
solução!

Oi Guilherme,

Isso acontece porque quando você pega os valores com o textContent eles vem como String , ou seja, "10" e "5". Quando você soma, na verdade ele está concatenando gerando outra String "105", e depois quando você faz a divisão ele sabe que deve transformar em número, resultando em 52.5. A solução para isso é fazendo um parse desse conteúdo para número. Exemplo:

 var meuNumero = parseFloat(numeroQuePegueiDoHtml)

Tenta aí e me fala

Cara, muito obrigado deu certo, olha o código ai em baixo.

var aluno = document.querySelector("#primeiro-aluno");

var tdNota1 = aluno.querySelector(".info-nota1");
var num1 = parseInt(tdNota1.textContent);

var tdNota2 = aluno.querySelector(".info-nota2");
var num2 = parseInt(tdNota2.textContent);

var media = (num1 + num2)/2;

console.log(media);

Boa parabéns, só lembre que se os valores vierem quebrados é melhor usar o parseFloat =)