Logo Hardware.com.br
Gabriel Rochadel
Gabriel Roch... Super Participante Registrado
359 Mensagens 31 Curtidas

Me ajudem a resolver problemas de matemática em meu código!

#1 Por Gabriel Roch... 01/02/2024 - 15:43
Por que meu código não da o resultado igual o resultado do excel?
a minha função ela retorna um valor diferente do excel e isso eu não entendo.

códigos excel :

= G5 = 2,50%

=(1+G5)^(1/30)-1 = 0,08%  até aqui tudo certo pois coloquei manualmente no código 0,08%

---------------------------------

exemplo dia 35 que é taxa de desconto para quem escolhe pagar em 35 dias.

$G$6 = 0,08% taxa diaria
D14 = 35 dia prazo a pagar selecionado na option do html
=(1+$G$6)^D14-1

Resultado no excel = 2,92%

resultado no código javascript 2,83%

<script>
var taxaDiaria = 0.08 / 100; // Convertendo a taxa diária para decimal
var prazoDias = 35;

// Calculando o resultado
var resultado = Math.pow(1 + taxaDiaria, prazoDias) - 1;

// Exibindo o resultado
result = (resultado * 100 + '%');
alert(result);
</script>




função para calcular desco

function calcularDesconto() {
    // Obter os elementos necessários
    var prazoElement = document.getElementById("prazo&quot;
    var comissaoElement = document.getElementById("comissao&quot;
    var descontoElement = document.getElementById("desconto&quot;

    // Taxa de desconto diária
    var taxaDiaria = 0.08 / 100;
    // Prazo selecionado
    var prazoSelecionado = parseInt(prazoElement.value);
    var mudarTaxa;

    switch (prazoSelecionado) {
        case 35:
            mudarTaxa = 1.0;
            break;
        case 28:
            mudarTaxa = 0.80;
            break;
        case 21:
            mudarTaxa = 0.60;
            break;
        case 14:
            mudarTaxa = 0.40;
            break;
        case 7:
            mudarTaxa = 0.20;
            break;
        default:
            // Caso nenhum dos valores acima corresponda a prazoSelecionado
            // Defina um valor padrão ou lide com isso conforme necessário.
            mudarTaxa = 0;
            break;
    }

// Agora você pode usar a variável taxaDesconto conforme necessário.

    // Taxa de desconto para o prazo selecionado
    var taxaDesconto = Math.pow(1 + taxaDiaria, prazoSelecionado + mudarTaxa) - 1 ;
    taxaDesconto =  parseFloat(taxaDesconto.toFixed(4).replace(',', '.'));
    // Exibir o desconto na página
    var resultado = taxaDesconto * calcularTotal();
    var resultadoFormatado = parseFloat(resultado.toFixed(2).replace(',', '.'));
    descontoElement.textContent = resultadoFormatado.toFixed(2) + '%';
    console.log(taxaDesconto);
   
    // Chame a função calcularMargemTotal aqui, após calcular o desconto
    return resultadoFormatado;

}

// Adicione o evento 'change' ao select de prazo
document.getElementById("prazo&quot.addEventListener("change", calcularDesconto);


código completo :


<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
   



<style>
    .divisa{
        margin: 20px;
        border: 2px solid black;
        body{ font-family-removed: Arial;}
    }
    table {
        width: 100%;
        border-collapse: collapse;
        margin-top: 20px;
    }

    th {
        background-color: #FFC000;
        color: white;
        font-weight: bold;
        padding: 10px;
        text-align: left;
        cursor: pointer;
    }

    td {
        padding: 10px;
        text-align: left;
        cursor: pointer;
    }

    tbody td {
        background-color: white !important;
    }

    input {
        width: 50px;
    }

    .editavel {
        cursor: pointer;
    }

    #totalQtdeKg,
    #media,
    #total {
        font-weight: bold;
    }

    td.editavel[contenteditable="true"] {
        background-color: #FFC000;
    }

    tfoot {
        font-weight: bold;
    }

    #total-label {
        font-weight: bold;
        text-transform: uppercase;
    }
    th:nth-child(6),
td:nth-child(6) {
    display: none;
}  
div#container{
    overflow-x: auto;
}    

</style>
</head>

<body>
    <h2></h2>
    <div id="container">
        <table id="tabela">
            <thead>
                <tr>
                    <th>Produto</th>
                    <th class="editavel" onclick="habilitarEdicao(this, 'qtde_kg')">Qtde Kg</th>
                    <th>Valor Unitário R$</th>
                    <th>Valor Total R$</th>
                    <th style="width: 20px";>CPV</th>
                    <th>Custo</th>
                    <th class="editavel" onclick="habilitarEdicao(this, 'margem')">Margem Contribuição</th>
                </tr>
            </thead>
            <tbody>
                <!-- MANT BD 12KG -->
                <tr>
                    <td>MANT BD 12KG</td>
                    <td class="editavel" onclick="habilitarEdicao(this, 'qtde_kg')">0</td>
                    <td>R$ 29.50</td>
                    <td>R$ 0.00</td>
                    <td>2,89</td>
                    <td>0</td>
                    <td id="cpv_MANT_BD_12KG"></td>
                    <td class="calculado"></td>
                </tr>
                <!-- MANT 200G -->
                <tr>
                    <td>MANT 200G</td>
                    <td class="editavel" onclick="habilitarEdicao(this, 'qtde_kg')">0</td>
                    <td>R$ 29.56</td>
                    <td>R$ 0.00</td>
                    <td>2,89</td>
                    <td>0</td>
                    <td id="cpv_MANT_200G"></td>
                    <td class="calculado"></td>
                </tr>
                <!-- MANT 500G -->
                <tr>
                    <td>MANT 500G</td>
                    <td class="editavel" onclick="habilitarEdicao(this, 'qtde_kg')">0</td>
                    <td>R$ 28.98</td>
                    <td>R$ 0.00</td>
                    <td>2,89</td>
                    <td>0</td>
                    <td>calcularcpv deverá aparecer aqui</td>
                    <td class="calculado"></td>
                </tr>
                <!-- MANTEIGA BALDE DE 3,5 KG -->
                <tr>
                    <td>MANTEIGA BALDE DE 3,5 KG</td>
                    <td class="editavel" onclick="habilitarEdicao(this, 'qtde_kg')">0</td>
                    <td>R$ 29.35</td>
                    <td>R$ 0.00</td>
                    <td>2,89</td>
                    <td>0</td>
                    <td>calcularcpv deverá aparecer aqui</td>
                    <td class="calculado"></td>
                </tr>
                <!-- QUEIJO COAL. FD/12 3Kg por Und. -->
                <tr>
                    <td>QUEIJO COAL. FD/12 3Kg por Und.</td>
                    <td class="editavel" onclick="habilitarEdicao(this, 'qtde_kg')">0</td>
                    <td>R$ 28.50</td>
                    <td>R$ 0.00</td>
                    <td>21,61</td>
                    <td>0</td>
                    <td>calcularcpv deverá aparecer aqui</td>
                    <td class="calculado"></td>
                </tr>
                <!-- QUEIJO COAL. 500G FD 40und -->
                <tr>
                    <td>QUEIJO COAL. 500G FD 40und</td>
                    <td class="editavel" onclick="habilitarEdicao(this, 'qtde_kg')">0</td>
                    <td>R$ 30.13</td>
                    <td>R$ 0.00</td>
                    <td>21,61</td>
                    <td>0</td>
                    <td>calcularcpv deverá aparecer aqui</td>
                    <td class="calculado"></td>
                </tr>
                <!-- QUEIJO COAL. FD/6 3kg por Und -->
                <tr>
                    <td>QUEIJO COAL. FD/6 3kg por Und</td>
                    <td class="editavel" onclick="habilitarEdicao(this, 'qtde_kg')">0</td>
                    <td>R$ 28.77</td>
                    <td>R$ 0.00</td>
                    <td>21,61</td>
                    <td>0</td>
                    <td>calcularcpv deverá aparecer aqui</td>
                    <td class="calculado"></td>
                </tr>
                <!-- QUEIJO. Minas Frescal -->
                <tr>
                    <td>QUEIJO. Minas Frescal</td>
                    <td class="editavel" onclick="habilitarEdicao(this, 'qtde_kg')">0</td>
                    <td>R$ 31.35</td>
                    <td>R$ 0.00</td>
                    <td>16,14</td>
                    <td>0</td>
                    <td>calcularcpv deverá aparecer aqui</td>
                    <td class="calculado"></td>
                </tr>
                <!-- MUSSARELA CX/6 4Kg -->
                <tr>
                    <td>MUSSARELA CX/6 4Kg</td>
                    <td class="editavel" onclick="habilitarEdicao(this, 'qtde_kg')">0</td>
                    <td>R$ 25.50</td>
                    <td>R$ 0.00</td>
                    <td>23,32</td>
                    <td>0</td>
                    <td>calcularcpv deverá aparecer aqui</td>
                    <td class="calculado"></td>
                </tr>
                <!-- MUSSARELA FD/8 4Kg -->
                <tr>
                    <td>MUSSARELA FD/8 4Kg</td>
                    <td class="editavel" onclick="habilitarEdicao(this, 'qtde_kg')">0</td>
                    <td>R$ 26.60</td>
                    <td>R$ 0.00</td>
                    <td>23,32</td>
                    <td>0</td>
                    <td>calcularcpv deverá aparecer aqui</td>
                    <td class="calculado"></td>
                </tr>
                <!-- MUSSARELA ESTRELA CX 6und. 4Kg -->
                <tr>
                    <td>MUSSARELA ESTRELA CX 6und. 4Kg</td>
                    <td class="editavel" onclick="habilitarEdicao(this, 'qtde_kg')">0</td>
                    <td>R$ 25.10</td>
                    <td>R$ 0.00</td>
                    <td>20.99</td>
                    <td>0</td>
                    <td>calcularcpv deverá aparecer aqui</td>
                    <td class="calculado"></td>
                </tr>
                <!-- QUEIJO PRATO CX/6 4kg -->
                <tr>
                    <td>QUEIJO PRATO CX/6 4kg</td>
                    <td class="editavel" onclick="habilitarEdicao(this, 'qtde_kg')">0</td>
                    <td>R$ 26.00</td>
                    <td>R$ 0.00</td>
                    <td>17,71</td>
                    <td>0</td>
                    <td>calcularcpv deverá aparecer aqui</td>
                    <td class="calculado"></td>
                </tr>
                <!-- REQ. CREMOSO CX 15Und.200Gr -->
                <tr>
                    <td>REQ. CREMOSO CX 15Und.200Gr</td>
                    <td class="editavel" onclick="habilitarEdicao(this, 'qtde_kg')">0</td>
                    <td>R$ 22.15</td>
                    <td>R$ 0.00</td>
                    <td>17,00</td>
                    <td>0</td>
                    <td>calcularcpv deverá aparecer aqui</td>
                    <td class="calculado"></td>
                </tr>
                <!-- Adicione mais produtos conforme necessário -->
            </tbody>
            <tfoot>
                <tr>
                    <td id="total-label">TOTAL</td>
                    <td id="totalQtdeKg">0.00</td>
                    <td id="media">0.00</td>
                    <td id="total">R$ 0.00</td>
                    <td id="cpvx">0</td>
                    <td id="custo-total">00.0</td>
                    <td id="margem-total"></td>
                    <td class="calculado"></td>
                </tr>
            </tfoot>
        </table>
    </div>
    <div class="divisa"></div>
    <label for="uf">Selecione o Estado:</label>
    <select id="uf" onchange="calcularFrete()">
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
    </select>

    <p>Distância (km): <span id="distancia">0</span></p>
    <p>Valor Final: R$ <span id="valorFinal">0.00</span></p>
    <div class="divisa"></div>

    <label for="prazo">Selecione o prazo médio:</label>
    <select id="prazo" name="prazo">
       
       
       
       
       
       
    </select>

    <br>

    <label for="comissao">Comissão (%):</label>
    <input type="number" id="comissao" name="comissao" min="0" step="0.1" value="1.5">
    <p>Desconto: R$ <span id="desconto">0.00</span></p>
   
   
   
    <script >
        //Adiciona o evento 'input' às células editáveis
var editaveis = document.querySelectorAll('.editavel');
var editingCell = null;

editaveis.forEach(function (celula) {
    celula.addEventListener('input', function () {
        calcularValorTotal(celula.parentElement);
        calcularTotalQtdeKg();
        //calcularMedia();
        calcularTotal();
        calcularCustoTotal();
        //calcularCPV();
        exibirCpv();
        calcularDesconto();
        calcularMargemTotal();
    });

    celula.addEventListener('keydown', function (e) {
        if (e.key === 'Enter') {
            desabilitarEdicao();
        }
    });
});

function habilitarEdicao(celula, classe) {
    if (editingCell) {
        desabilitarEdicao();
    }

    celula.setAttribute('contenteditable', true);
    celula.focus();
    editingCell = celula;
}

function desabilitarEdicao() {
    if (editingCell) {
        editingCell.removeAttribute('contenteditable');
        editingCell = null;
    }
}

function formatarDinheiro(valor) {
    return valor.toLocaleString('pt-BR', { minimumFractionDigits: 2, maximumFractionDigits: 2 });
}

/*funções aqui */

function calcularTotalQtdeKg() {
    var linhas = document.querySelectorAll('#tabela tbody tr');

    var totalQtdeKg = 0;

    linhas.forEach(function (linha) {
        totalQtdeKg += parseFloat(linha.querySelector('td:nth-child(2)').textContent);
    });

    document.getElementById('totalQtdeKg').textContent = totalQtdeKg.toFixed(2);

    return totalQtdeKg;
}


function calcularTotal() {
    var linhas = document.querySelectorAll('#tabela tbody tr');

    var total = 0;

    linhas.forEach(function (linha) {
        var valorTotal = parseFloat(linha.querySelector('td:nth-child(4)').textContent.replace('R$ ', '').replace(',', '.'));
        total += valorTotal;
    });

    document.getElementById('total').textContent = formatarDinheiro(total);

    return total;
}

function calcularCustoTotal() {
var linhas = document.querySelectorAll('#tabela tbody tr');
var custoTotal = 0;

linhas.forEach(function (linha) {
    var custo = parseFloat(linha.querySelector('td:nth-child(6)').textContent.replace('R$ ', '').replace(',', '.'));
    custoTotal += custo;
});

document.getElementById('custo-total').textContent = formatarDinheiro(custoTotal);

return custoTotal;

}

function calcularMedia() {
    var linhas = document.querySelectorAll('#tabela tbody tr');

    var total = 0;
    var totalQtdeKg = 0;

    linhas.forEach(function (linha) {
        var valorTotal = parseFloat(linha.querySelector('td:nth-child(4)').textContent.replace('R$ ', '').replace(',', '.'));
        var qtdeKg = parseFloat(linha.querySelector('td:nth-child(2)').textContent);
        total += valorTotal;
        totalQtdeKg += qtdeKg;
    });

    var media = totalQtdeKg !== 0 ? total / totalQtdeKg : 0;

    document.getElementById('media').textContent = formatarDinheiro(media);
}

function calcularValorTotal(linha) {
    var qtdeKg = parseFloat(linha.querySelector('.editavel[onclick="habilitarEdicao(this, \'qtde_kg\')"]').textContent);


    var valorUnitario = parseFloat(linha.querySelector('td:nth-child(3)').textContent.replace('R$ ', '').replace(',', '.'));

    var cpv = parseFloat(linha.querySelector('td:nth-child(5)').textContent.replace(',', '.')); // Obtém o CPV

    var valorTotal = qtdeKg * valorUnitario;
   
    var custo = cpv * qtdeKg; // Calcula o custo

    linha.querySelector('td:nth-child(4)').textContent = valorTotal.toFixed(2);
    linha.querySelector('td:nth-child(6)').textContent = custo.toFixed(2); // Exibe o custo na tabela

    // Calcular a margem de contribuição (em porcentagem)
    var margem = (valorUnitario !== 0 ? ((valorUnitario - cpv) / valorUnitario) * 100 : 0);

    // Exibir a margem de contribuição na tabela
    linha.querySelector('td:nth-child(7)').textContent = margem.toFixed(1) + '%';


     //Calcular a média (Valor Total R$/Qtde Kg)
    calcularMedia();
    return valorTotal;
}


function exibirCpv() {
    var linhas = document.querySelectorAll('#tabela tbody tr');

    linhas.forEach(function (linha) {
        var qtdeKg = parseFloat(linha.querySelector('td:nth-child(2)').textContent);
        var custo = parseFloat(linha.querySelector('td:nth-child(6)').textContent.replace('R$ ', '').replace(',', '.'));
       
        // Evita a divisão por zero
        var cpvx = calcularCustoTotal() !== 0 ? calcularCustoTotal() / calcularTotalQtdeKg() : 0;
        //var cpv =  custo / qtdeKg;

        document.getElementById('cpvx').textContent = formatarDinheiro(cpvx);
    });
}

function calcularCPV() {
    var linhas = document.querySelectorAll('#tabela tbody tr');

    linhas.forEach(function (linha) {
        var vunitarioText = linha.querySelector('td:nth-child(3)').textContent;
        var vunitario = parseFloat(vunitarioText.replace('R$ ', '').replace(',', '.'));

        var cpv = parseFloat(linha.querySelector('td:nth-child(5)').textContent.replace('R$ ', '').replace(',', '.'));

        var margem = (vunitario !== 0 ? ((vunitario - cpv) / vunitario) * 100 : 0);
        // Calcula o CPV em porcentagem

        // Adiciona o resultado ao elemento correspondente
        linha.querySelector('td:nth-child(7)').textContent = margem.toFixed(1) + '%';
        document.getElementById('cpvx').textContent = formatarDinheiro(margem);
    });
}

// Chama a função de CPV ao carregar a página
calcularCPV();


/*FRETES E MARGEM*/
 

/*CALCULAR FRETE*/

function calcularFrete() {
    var ufSelect = document.getElementById("uf&quot;
    var distanciaElement = document.getElementById("distancia&quot;
    var valorFinalElement = document.getElementById("valorFinal&quot;

    var uf = ufSelect.value;

    // Tabela de frete (distância em km e valor final em R$)
    var tabelaFrete = {
        'AC': { distancia: 1520, valorFinal: 3040.00 },
        'AL': { distancia: 2006, valorFinal: 4011.00 },
        'AP': { distancia: 1367, valorFinal: 2734.00 },
        'AM': { distancia: 1493, valorFinal: 2986.00 },
        'BA_MET': { distancia: 1080, valorFinal: 2160.00 },
        'BA_EXT': { distancia: 2340, valorFinal: 4680.00 },
        'CE': { distancia: 1285, valorFinal: 2569.00 },
        'DF': { distancia: 1053, valorFinal: 2105.00 },
        'ES': { distancia: 1165, valorFinal: 2329.00 },
        'GO': { distancia: 1696, valorFinal: 3392.00 },
        'MA': { distancia: 1479, valorFinal: 2958.00 },
        'MT': { distancia: 1263, valorFinal: 2526.00 },
        'MS': { distancia: 1722, valorFinal: 3443.00 },
        'MG': { distancia: 1020, valorFinal: 2039.00 },
        'PA': { distancia: 1350, valorFinal: 2700.00 },
        'PB': { distancia: 1849, valorFinal: 3698.00 },
        'PR': { distancia: 2194, valorFinal: 4388.00 },
        'PE': { distancia: 1015, valorFinal: 2029.00 },
        'PI_CENT': { distancia: 2100, valorFinal: 4200.00 },
        'PI_EXT_N': { distancia: 2800, valorFinal: 5600.00 },
        'RJ': { distancia: 1415, valorFinal: 2829.00 },
        'RN': { distancia: 1140, valorFinal: 2280.00 },
        'RS': { distancia: 2050, valorFinal: 4100.00 },
        'RO': { distancia: 1430, valorFinal: 2860.00 },
        'RR': { distancia: 1740, valorFinal: 3480.00 },
        'SC': { distancia: 2224, valorFinal: 4448.00 },
        'SP': { distancia: 1354, valorFinal: 2707.00 },
        'SE': { distancia: 0, valorFinal: 0.00 }, // Valor não especificado
        'TO': { distancia: 1202, valorFinal: 2404.00 },
    };

    // Verifica se a UF selecionada existe na tabela de frete
    if (uf in tabelaFrete) {
        var distancia = tabelaFrete[uf].distancia;
        var valorFinal = tabelaFrete[uf].valorFinal;

        // Atualiza os elementos no HTML com os resultados
        distanciaElement.textContent = distancia;
        valorFinalElement.textContent = valorFinal.toFixed(2);
    } else {
        // UF não encontrada na tabela de frete
        alert('UF não encontrada na tabela de frete.');
    }
}

/*calcular margem*/

function calcularMargemTotal() {
    // Obter os valores necessários
    var resultado = calcularTotal();
    var custoTotal = calcularCustoTotal();
    var frete = calcularFrete();
    var comissaoPercentual = 1.5; // Valor fixo de 1.5%, pode ser ajustado conforme necessário
    var desconto = calcularDesconto(); // Valor fixo de desconto, pode ser ajustado conforme necessário
    // Calcular o valor do frete (já obtido pela função calcularFrete)
    var valorFrete = parseFloat(document.getElementById("valorFinal&quot.textContent.replace(',', '.'));

    // Calcular o valor da comissão
    var comissaoValor = (resultado * comissaoPercentual) / 100;
    // Calcular a margem total
    var margemTotal = (resultado - custoTotal - valorFrete - comissaoValor - desconto) / resultado * 100;

    // Aplicar cores com base nas condições
    if (margemTotal > 15.05) {
        document.getElementById('margem-total').style.background = 'blue';
        } else if (margemTotal < 10.05) {
            document.getElementById('margem-total').style.background = 'red';
        } else {
            document.getElementById('margem-total').style.background = 'yellow';
        }


    // Exibir os resultados na página
    document.getElementById('margem-total').textContent = margemTotal.toFixed(1) + '%';
}

// Função para calcular o desconto
// Função para calcular o desconto
function calcularDesconto() {
    // Obter os elementos necessários
    var prazoElement = document.getElementById("prazo&quot;
    var comissaoElement = document.getElementById("comissao&quot;
    var descontoElement = document.getElementById("desconto&quot;

    // Taxa de desconto diária
    var taxaDiaria = 0.08 / 100;
    // Prazo selecionado
    var prazoSelecionado = parseInt(prazoElement.value);
    var mudarTaxa;

    switch (prazoSelecionado) {
        case 35:
            mudarTaxa = 1.0;
            break;
        case 28:
            mudarTaxa = 0.80;
            break;
        case 21:
            mudarTaxa = 0.60;
            break;
        case 14:
            mudarTaxa = 0.40;
            break;
        case 7:
            mudarTaxa = 0.20;
            break;
        default:
            // Caso nenhum dos valores acima corresponda a prazoSelecionado
            // Defina um valor padrão ou lide com isso conforme necessário.
            mudarTaxa = 0;
            break;
    }

// Agora você pode usar a variável taxaDesconto conforme necessário.

    // Taxa de desconto para o prazo selecionado
    var taxaDesconto = Math.pow(1 + taxaDiaria, prazoSelecionado + mudarTaxa) - 1 ;
    taxaDesconto =  parseFloat(taxaDesconto.toFixed(4).replace(',', '.'));
    // Exibir o desconto na página
    var resultado = taxaDesconto * calcularTotal();
    var resultadoFormatado = parseFloat(resultado.toFixed(2).replace(',', '.'));
    descontoElement.textContent = resultadoFormatado.toFixed(2) + '%';
    console.log(taxaDesconto);
   
    // Chame a função calcularMargemTotal aqui, após calcular o desconto
    return resultadoFormatado;

}

// Adicione o evento 'change' ao select de prazo
document.getElementById("prazo&quot.addEventListener("change", calcularDesconto);

    </script>
</body>
</html>

Anexos

© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal