Soma de dois campos com mask de separador de milhar

Bom dia,

Estou tentando fazer uma soma de dois campos que possuem mask de milhar porem após a soma o resultado so soma o que esta depois do ultimo ponto, como posso fazer para ele somar tudo?


<div class="col-md-2">
                                    <label>Média Ultimos 6 Meses(m²):</label><span
                                        class="required text-danger"><strong>*</strong></span> <input
                                        type="text" class="form-control" id="med_6m_VS1"
                                        name="med_6m_VS1" value="0" mask="#000.000.000.000.000"
                                        onblur="VS1();VST();maskTabelasPaiFilho();">
                                </div>

<div class="col-md-2">
                                    <label>Média Ultimos 6 Meses(m²):</label><span
                                        class="required text-danger"><strong>*</strong></span> <input
                                        type="text" class="form-control" id="med_6m_VS2"
                                        name="med_6m_VS2" value="0" mask="#000.000.000.000.000"
                                        onblur="VS2();VST();maskTabelasPaiFilho();">
                                </div>


function VST()    {

                        var a6 = document.getElementById("med_6m_VS1").value;
                        var b6 = document.getElementById("med_6m_VS2").value;
                        var c6 = document.getElementById("med_6m_VS3").value;
                        var d6 = document.getElementById("med_6m_VS4").value;
                        var e6 = document.getElementById("med_6m_VS5").value;
                        var f6 = document.getElementById("med_6m_VS6").value;
                        var g6 = document.getElementById("med_6m_VS7").value;
                        var h6 = document.getElementById("med_6m_VS8").value;
                        var i6 = document.getElementById("med_6m_VS9").value;
                        var j6 = document.getElementById("med_6m_VS10").value;
                        var k6 = document.getElementById("med_6m_VS11").value;
                        var l6 = document.getElementById("med_6m_VS12").value;
                        var m6 = document.getElementById("med_6m_VS13").value;

                        $("#med_6m_VST").val((parseFloat(a6) + parseFloat(b6) + parseFloat(c6)
                                + parseFloat(d6) + parseFloat(e6)
                                + parseFloat(f6) + parseFloat(g6)
                                + parseFloat(h6) + parseFloat(i6)
                                + parseFloat(j6) + parseFloat(k6)
                                + parseFloat(l6) + parseFloat(m6)).toLocaleString('pt-BR'));

Se seus campos numéricos possuem máscara você primeiro precisa remover a máscara dos valores para só então converter em Float, pois um número 123.123.321 (por exemplo) é inválido em float (no float o ponto indica os decimais e um número inteiro não possui pontos).

Update:

Já que funcionou agora fica a dica pra reduzir código. Você pode criar funções e laços de repetição pra agilizar as coisas.

Por exemplo:


/**
 * Converte um número, formatado em pt-BR, para float
 *
 * @param {string} value
 * @returns {number}
 */
function convertBrNumberToFloat(value) {
    if (typeof value !== 'string') {
        return 0;
    }

    return parseFloat(value.replaceAll('.', '').replace(',', '.'));
}

function VST() {
    let sum = 0.0;

    for (let i = 1; i <= 13; ++i) {
        sum += convertBrNumberToFloat(document.getElementById(`med_6m_VS${i}`).value);
    }

    document.getElementById("med_6m_VST").value = sum.toLocaleString('pt-BR');
}

Deu certo, obrigado! Acrescentei um .replace() e funcionou.

A resposta do Bruno Gasparetto deu certo, eu acrescentei um .replace() no JS e deu certo. O código ficou assim:


function VST() {

        var a6 = (document.getElementById("med_6m_VS1").value).replace(
                /[^0-9,]*/g, '').replace(',', '.');
        var b6 = (document.getElementById("med_6m_VS2").value).replace(
                /[^0-9,]*/g, '').replace(',', '.');
        var c6 = (document.getElementById("med_6m_VS3").value).replace(
                /[^0-9,]*/g, '').replace(',', '.');
        var d6 = (document.getElementById("med_6m_VS4").value).replace(
                /[^0-9,]*/g, '').replace(',', '.');
        var e6 = (document.getElementById("med_6m_VS5").value).replace(
                /[^0-9,]*/g, '').replace(',', '.');
        var f6 = (document.getElementById("med_6m_VS6").value).replace(
                /[^0-9,]*/g, '').replace(',', '.');
        var g6 = (document.getElementById("med_6m_VS7").value).replace(
                /[^0-9,]*/g, '').replace(',', '.');
        var h6 = (document.getElementById("med_6m_VS8").value).replace(
                /[^0-9,]*/g, '').replace(',', '.');
        var i6 = (document.getElementById("med_6m_VS9").value).replace(
                /[^0-9,]*/g, '').replace(',', '.');
        var j6 = (document.getElementById("med_6m_VS10").value).replace(
                /[^0-9,]*/g, '').replace(',', '.');
        var k6 = (document.getElementById("med_6m_VS11").value).replace(
                /[^0-9,]*/g, '').replace(',', '.');
        var l6 = (document.getElementById("med_6m_VS12").value).replace(
                /[^0-9,]*/g, '').replace(',', '.');
        var m6 = (document.getElementById("med_6m_VS13").value).replace(
                /[^0-9,]*/g, '').replace(',', '.');



        $("#med_6m_VST")
                .val(
                        (parseFloat(a6) + parseFloat(b6) + parseFloat(c6)
                                + parseFloat(d6) + parseFloat(e6)
                                + parseFloat(f6) + parseFloat(g6)
                                + parseFloat(h6) + parseFloat(i6)
                                + parseFloat(j6) + parseFloat(k6)
                                + parseFloat(l6) + parseFloat(m6)));

Que bom que deu certo. Editei minha resposta com um exemplo de como diminuir um pouco o código. Facilita um pouco na manutenção futura, por exemplo

Blz, muito obrigado, agora ficou muito bom.