How to solve margin calculation problem in JavaScript?

2

I have the following inputs:

1st Cost, where I inform the value of 6,23 2nd Margin, where I enter the value of 29,21

The JavaScript does the automatic calculation and returns me 8,05 in value

Well, that's all right. But when I do the opposite happens the error.

1st Cost, where I inform the value of 6,23 2nd Value, where I enter the value of 8,05

The JavaScript does the automatic calculation and returns me 36.44 in the margin, the correct one being 29,21

Does anyone know what it can be?

Follow the code:

$(document).ready(function () {
    $(".valor").on("input", function () {
        // Margem
        var valor = $(this).val();
        var valorCorrigido = parseFloat(adicionarPontos(valor));
           
        var valorFloat = parseFloat(valorCorrigido) || 0.0;

        // Custo  
        var valorCusto = $('#custo').val();
        var valorCustoCorrigido = parseFloat(removerPontos(valorCusto));
        var valorCustoFloat = parseFloat(valorCustoCorrigido) || 0.0;

        // Calculo
        var calculo = (parseFloat(valorFloat) - parseFloat(valorCustoFloat)) / parseFloat(valorCustoFloat) * 100;
        var inputMargem = $(this).attr("margem");

        $("#" + inputMargem).val(calculo.toFixed(2)).trigger('blur');
    });
    // Faz o calculo do valor com base na margem
    $(".margem").on("input", function () {
        // Margem
        var valorMargem = $(this).val();  
        var valorMargemCorrigido = parseFloat(adicionarPontos(valorMargem));
        var valorMargemFloat = parseFloat(valorMargemCorrigido) || 0.0; 

        // Custo
        var valorCusto = $('#custo').val();
        var valorCustoCorrigido = parseFloat(removerPontos(valorCusto));
        var valorCustoFloat = parseFloat(valorCustoCorrigido) || 0.0; 

        // Cálculo
        var calculo = (parseFloat(valorCustoFloat) * parseFloat(valorMargemFloat) / 100) + parseFloat(valorCustoFloat);
        var inputValor = $(this).attr("valor");

        var resultadoMonetario = calculo.toFixed(2).toString();
        resultadoMonetario = resultadoMonetario.replace(".", ",");

        $("#" + inputValor).val(resultadoMonetario).trigger('blur');
    });

    function removerPontos(valor){
        valor = valor.replace(".","");
        valor = valor.replace(",",".");
        return valor;           
    }
    
    function adicionarPontos(valor){
       if(valor.length == 1){
           return valor;
       }
       else{
       if(valor.length == 2){
           return valor;
       }
       else{
       valor = valor.replace(",","");
    	 var inteiro = valor.substring(0,valor.length - 2);
       
       console.log(inteiro);
       
       var decimal = valor.substr(2);
       
       console.log(inteiro + "." + decimal);
       return inteiro + "." + decimal;
       }
       }
    }
});

$('input').mask('00.000.000,00', {
    reverse: true
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script><scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.13.4/jquery.mask.js"></script>


Custo:
<input type='text' id='custo' class='custo valores' name='custo'>
<br>
<br> Valor:
<input type='text' id='valor1' class='valor valores' name='valor1' margem='margem1'> Margem:
<input type='text' id='margem1' class='margem valores' name='margem1' valor="valor1">

<br> Valor:
<input type='text' id='valor2' class='valor valores' name='valor2' margem='margem2'> Margem:
<input type='text' id='margem2' class='margem valores' name='margem2' valor="valor2">
    
asked by anonymous 04.03.2016 / 14:14

1 answer

3

You have an error in the addPoints function:

The correct one is:

 var inteiro = valor.substring(0,valor.length - 2);
 var decimal = valor.substring(valor.length - 2, valor.length);

All "console.log" snippets can be removed. They are used only for debugging.

    
04.03.2016 / 19:18