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

Wiew esta dando NAN

Olá pessoal, estou fazendo um exercício por forá, e estou com o problema. Meu cenário é bem simples

Faça um programa que receba o salário de um funcionário, data e o percentual de aumento, calcule e mostre o valor do aumento e o novo salário.

já fiz todo o código usando ES6 e o modelo MVC, só que estou com o seguinte problema, na hora de mostra novo salário na view ele está concatenando e não fazendo a operação aritmetica, o meu código esta no github, para melhora a organização, vou deixa o link ae vcs olha e me diz onde estou errando.

link do código: https://github.com/alissonsuassuna/Exercicios-basicos-js/tree/master/exerc%C3%ADcio-05-ES6

desde já agradeço muito..

att: Alisson Suassuna

8 respostas

Boa tarde meu aluno!

Testei o seu código. Funciona perfeitamente. O que você deve estar fazendo é digitando o valor decimal com , em vez de ponto. Seu código espera receber, por exemplo, 100.12 e não 100,12.

Faça um teste novamente.

Flavio, eu teste das seguintes forma

100 100.00 100,00

10 10.00 10,00

Da o mesmo erro, como posso te enviar um print screen para o senhor ver?????

Eu já tentei fazer um parseInt(), mas não resolveu

e se eu tento instância a Classe Salario da esse outro erro

Salario.js:5 Uncaught TypeError: Cannot read property 'getTime' of undefined at new Salario (Salario.js:5) at index.html:40 

Eu digitei:

21/12/2013
100
50

Não deu erro de NAN, mas deu um erro de lógica que é a seguinte. Ele esta concatenando o 100 com o 50. Não deveria ser isso. Mas o erro de NAN eu só recebo se eu digitar ,. Estou usando o projeto do seu github.

solução!

Seu cria salário deve ficar assim:

    _criaSalario(){
        return new Salario(DateHelper.textoParaData(this._inputData.value), parseFloat(this._inputSalario.value), parseFloat(this._inputPercentual.value));

    }

Veja que no próprio curso eu faço também parseFloat e parseInt, para a quantidade.

Com isso o resultado fica correto. Segue a sua classe SalarioController modificada:

class SalarioController{

    constructor(){

        let $ = document.querySelector.bind(document);

        this._inputData = $('#data');
        this._inputSalario = $('#salario');
        this._inputPercentual = $('#percentual');

        this._listaSalarios = new ListaSalario();

        this._salarioView = new SalarioView($('#salarioView'));

        this._salarioView.uptade(this._listaSalarios);

    }
    adiciona(event){
        event.preventDefault();

        this._listaSalarios.adiciona(this._criaSalario());

        this._salarioView.uptade(this._listaSalarios);

        this._limpaFormulario();

        console.log(this._listaSalarios.salarios);
    }

    _criaSalario(){


     / / um problema era o uso de vírgula, ou era que aqui não estava convertendo para o tipo correto, o que dava em um resultado doido no salário.
        return new Salario(DateHelper.textoParaData(this._inputData.value), parseFloat(this._inputSalario.value), parseFloat(this._inputPercentual.value));

    }

    _limpaFormulario(){

        this._inputData.value = '';
        this._inputPercentual.value = 0;
        this._inputSalario.value = 0

        this._inputData.focus();

    }
}

O erro Salario.js:5 Uncaught TypeError: Cannot read property 'getTime' of undefined at new Salario (Salario.js:5) at index.html:40 é por causa da sua tentativa de corrigir o problema anterior, deve ter cometido algum erro na digitação dos parâmetros do constructor.

O problema erra aqui _criaSalario(){ return new Salario(DateHelper.textoParaData(this._inputData.value), parseFloat(this._inputSalario.value), parseFloat(this._inputPercentual.value));

}

Vi e revi o primeiro curso, é muita coisa para aprender rsrs, no primeiro você ainda não usa o parseFloat().

vou começar ver o 2º agora, pequei mais de 100 exercício para fazer com ES6 assim aprendo melhor, e Flavío muito obrigado por me ajudar, suas aulas são as melhores !!!