vendredi 4 mars 2016

JavaScript calculating wrong percentage in two inputs

I have the following inputs:

cost, where I type in a currency value, like 6,23, profit, where I type in a percentage value like 29,21 and value where the sum of the both values is show.

JavaScript does the math and returns me in value the value from cost + the currency value of the percentage typed in profit, in which case the result is 8,05 (6,23 + 29,21%).

But if try to do the same, but informing the value instead of profit, as the same 8,05, so JavaScript would return me the profit of 29,21, but it returns me 36,44.

Does anyone know what it can be?

Here is my 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="http://ift.tt/JJs6bh"></script>

<script src="http://ift.tt/1p4y9zO"></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">



Aucun commentaire:

Enregistrer un commentaire