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"
var comissaoElement = document.getElementById("comissao"
var descontoElement = document.getElementById("desconto"
// 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".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"
var distanciaElement = document.getElementById("distancia"
var valorFinalElement = document.getElementById("valorFinal"
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".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"
var comissaoElement = document.getElementById("comissao"
var descontoElement = document.getElementById("desconto"
// 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".addEventListener("change", calcularDesconto);
</script>
</body>
</html>