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

Dúvida ao adicionar totalizadores

Após adicionar o totalizador de Volume apliquei o mesmo padrão para totalizar Quantidade e Valor. Porém quando adiciono uma negociação, o total desses 2 que adicionei aparecem com Zero antes. Exemplo: Quantidade 22 e valor 50 o totalizador apresenta 022 e 050. Abaixo o trecho onde adicionei esses totalizadores:

   <tfoot>
                <td colspan=1 align="center">TOTALIZADOR</td>
                <td>
                    ${modelo.negociacoes.reduce((total, n) => total + n.quantidade, 0)}
                </td>
                <td>
                    ${modelo.negociacoes.reduce((total, n) => total + n.valor, 0)}
                </td>
                <td>
                    ${modelo.negociacoes.reduce((total, n) => total + n.volume, 0)}
                </td>
            </tfoot>
4 respostas
solução!

Fala aí Rafael, tudo bem? Isso deve estar acontecendo por conta de um dos dois valores ser uma String, dai o JavaScript não está somando os valores, mas, sim os concatenando.

Para resolver o problema, verifique qual dos dois é do tipo String e faça um parse:

    <td colspan=1 align="center">TOTALIZADOR</td>
    <td>${modelo.negociacoes.reduce((total, n) => parseInt(total, 0) + parseInt(n.quantidade, 0), 0)}</td>
    <td>${modelo.negociacoes.reduce((total, n) => parseInt(total, 0) + parseInt(n.valor, 0), 0)}</td>
    <td>${modelo.negociacoes.reduce((total, n) => parseInt(total, 0) + parseInt(n.volume, 0), 0)}</td>
</tfoot>

Obs: É estranho algum dos valores ser uma String, o correto deveria todos ser números.

Espero ter ajudado.

Olá Rafael,

Como o Matheus comentou o problema está relacionado às propriedades da classe Negociacao serem do tipo string. Uma outra forma de fazer com que elas passem a ser efetivamente números é fazer a conversão já no método construtor da classe Negociacao, utilizando o parseInt:

class Negociacao {

    constructor(data, quantidade, valor) {
        this._data = new Date(data.getTime());
        this._quantidade = parseInt(quantidade);
        this._valor = parseInt(valor);
        Object.freeze(this);
    }
...
}

Valeu pessoal, ajudou pra caramba aqui! =]

Mágina Rafael, precisando não deixe de criar suas dúvidas.

Abraços