Ir para conteúdo
Fórum Script Brasil
  • 0

como fazer a divisao da taxa de entrega quando é um numero impar


adrsublimacao

Pergunta

exemplo tenho um foreach de produtos

 

 

$vTotalBC = 0;
$vTotalICMS = 0;
$vTotalvICMSDesonv = 0;
$vTotalvFCP = 0.00; //incluso no layout 4.00
$vTotalvBCST = 0.00;
$vTotalvST = 0.00;
$vTotalvFCPST = 0.00; //incluso no layout 4.00
$vTotalvFCPSTRet = 0.00; //incluso no layout 4.00
$vtotalIPI  = 0.00;
$vtotalPIS  = 0.00;
$vtotalCOFINS = 0.00;
$impostototal = 0.00;
$valortotal = 0.00;
$descontototal = 0.00;
$pesototal = 0.00;
$fretetotal = 0.00;
$outrototal = 0.00;
$x = 0;
$y = 0;

 

foreach($_REQUEST['produtos'] as $prod){
$y++;
}

foreach($_REQUEST['produtos'] as $prod ){    
$item = $x + 1;
    
$codigo = RmvString($_REQUEST['produtos'][$x]['item'], 2);    // CODIGO DO PRODUTO

$nomeproduto = RmvString($_REQUEST['produtos'][$x]['nome'], 2);    // CODIGO DO PRODUTO

$ncm = RmvString($_REQUEST['produtos'][$x]['ncm'], 2);      // NOME DO PRODUTO

$cfop = RmvString($_REQUEST['produtos'][$x]['cfop']);      // NOME DO PRODUTO

$un = RmvString($_REQUEST['produtos'][$x]['unidade']);      // NOME DO PRODUTO

$quantidade = RmvString($_REQUEST['produtos'][$x]['quantidade']);      // NOME DO PRODUTO

$valor = RmvString($_REQUEST['produtos'][$x]['subtotal']);      // NOME DO PRODUTO

$cst = RmvString($_REQUEST['produtos'][$x]['cst']);      // NOME DO PRODUTO

$pis = RmvString($_REQUEST['produtos'][$x]['pis']);      // NOME DO PRODUTO

$cofins = RmvString($_REQUEST['produtos'][$x]['cofins']);      // NOME DO PRODUTO

$origem = RmvString($_REQUEST['produtos'][$x]['origem']);      // NOME DO PRODUTO

$ean = RmvString($_REQUEST['produtos'][$x]['ean']);               // Cdigo EAN

$peso = ($_REQUEST['produtos'][$x]['peso']);           // Peso em KG. Ex: 800 gramas = 0.800 KG   // NOME DO PRODUTO


$total = ($quantidade * $valor );
 

 

//dentro do foreach tem a taxa vamos dizer q tenho 3 items no pedido e a taxa é 5 reais ao dividir 5 / 3 = 1.67 ai no final daria 5,01 em vez de  5 tem como eu pegar essa taxa e no final //acertar essa diferenca quando a divisao não é inteira

//a variavel $y armazena a quantidade de itens no caso a baixo to pegando a taxa / pela quantidade de itens

if(RmvString($_REQUEST['pedido']['frete'])!="" && $_REQUEST['pedido']['frete']>0){    
    $frete = $_REQUEST['pedido']['frete'] / $y;

}else{
    $frete = "";    
    $frete_total = "";
}

 

$fretetotal = $fretetotal + $frete;

//acima do armazenando o total do frete na variavel $fretetotal

 

}

}

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Eu sempre jogo a diferença no útlimo item na hora de ratear o frete:

<?php
function dec($valor){return number_format($valor,2,",",".");}
$frete=5;
$produtos=['maçã'=>10,"pera"=>20,"laranja"=>30];
$pesoTotal=0;
foreach($produtos as $produto=>$peso){$pesoTotal+=$peso;}
$ultimoItem=end($produtos);
$ultimaChave=key($produtos);
$verificador=0;
echo "<table><th>Produto<th>Peso<th>Frete";
foreach($produtos as $produto=>$peso){
  $fretePorItem=intval($frete*$peso/$pesoTotal*100)/100;
  $verificador+=$fretePorItem;
  if($produto==$ultimaChave){$fretePorItem+=$frete-$verificador;}
  echo "<tr><td>$produto<td>$peso<td align=right>".dec($fretePorItem);}
echo "<tr><td><th>Total<th align=right>".dec($frete)."</table>";

 

 

Captura de tela 2023-12-05 110907.png

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

  • 0
58 minutos atrás, lowys disse:

Mas 5 / 3, deveria ser igual a 1.666666666666667, que multiplicado por 3, é igual a 5
por quê a sua divisão está arredondando para 1.67?

porque pra parte fiscal vai redondo se for 1.66 x 3 daria 4,98

e se fosse aredondar pra mais 1,67 * 3 = 5,01

o que queria é o seguinte quando chegasse no ultimo item no casso no item 3 que no exemplo q dei seria 3 itens o valor de $Y quando chegasse no ultimo item somava todos os item anterios e diminuia pelo 5 ai o ultimo item ficaria com a diferenca pra fechar os 5

exemplo

taxa tem 1 = 5 reais / 3 =  1,67

taxa item 2 = 5 reais / 3 = 1,67 

ai no ultimo taxa item 3 serai  o valor da taxa - a soma das duas taxas anteriores

ou seja 5 reais - 1,67 - 1,67 = 1,66

queria uma regra pra fazer isso indiferente quantos item tiver sem o ultimo item soma tudo antes de taxa e pega somente o q faltar pra fechar

 

 

Link para o comentário
Compartilhar em outros sites

  • 0
$vTotalBC = 0;
$vTotalICMS = 0;
$vTotalvICMSDesonv = 0;
$vTotalvFCP = 0.00; //incluso no layout 4.00
$vTotalvBCST = 0.00;
$vTotalvST = 0.00;
$vTotalvFCPST = 0.00; //incluso no layout 4.00
$vTotalvFCPSTRet = 0.00; //incluso no layout 4.00
$vtotalIPI  = 0.00;
$vtotalPIS  = 0.00;
$vtotalCOFINS = 0.00;
$impostototal = 0.00;
$valortotal = 0.00;
$descontototal = 0.00;
$pesototal = 0.00;
$fretetotal = 0.00;
$outrototal = 0.00;
$x = 0;
$y = 0;

foreach($_REQUEST['produtos'] as $prod){
    $y++;
}

foreach($_REQUEST['produtos'] as $prod ){    
    $item = $x + 1;
    
    $codigo = RmvString($_REQUEST['produtos'][$x]['item'], 2);    // CODIGO DO PRODUTO
    $nomeproduto = RmvString($_REQUEST['produtos'][$x]['nome'], 2);    // NOME DO PRODUTO
    $ncm = RmvString($_REQUEST['produtos'][$x]['ncm'], 2);      // NOME DO PRODUTO
    $cfop = RmvString($_REQUEST['produtos'][$x]['cfop']);      // NOME DO PRODUTO
    $un = RmvString($_REQUEST['produtos'][$x]['unidade']);      // NOME DO PRODUTO
    $quantidade = RmvString($_REQUEST['produtos'][$x]['quantidade']);      // NOME DO PRODUTO
    $valor = RmvString($_REQUEST['produtos'][$x]['subtotal']);      // NOME DO PRODUTO
    $cst = RmvString($_REQUEST['produtos'][$x]['cst']);      // NOME DO PRODUTO
    $pis = RmvString($_REQUEST['produtos'][$x]['pis']);      // NOME DO PRODUTO
    $cofins = RmvString($_REQUEST['produtos'][$x]['cofins']);      // NOME DO PRODUTO
    $origem = RmvString($_REQUEST['produtos'][$x]['origem']);      // NOME DO PRODUTO
    $ean = RmvString($_REQUEST['produtos'][$x]['ean']);               // Cdigo EAN
    $peso = ($_REQUEST['produtos'][$x]['peso']);           // Peso em KG. Ex: 800 gramas = 0.800 KG   // NOME DO PRODUTO
    $total = ($quantidade * $valor );
    
    // Calcula o frete por item
    if (isset($_REQUEST['pedido']['frete']) && $_REQUEST['pedido']['frete'] > 0) {
        $frete_por_item = $_REQUEST['pedido']['frete'] / $y;
    } else {
        $frete_por_item = 0;
    }
    
    // Adiciona o frete por item ao total do frete
    $fretetotal += $frete_por_item;

    $x++;
}

// Ajusta o total do frete para ser o mesmo que o total pago
$total_frete_ajustado = $_REQUEST['pedido']['frete'] - ($frete_por_item * ($y - 1));
$fretetotal += $total_frete_ajustado;

Calculamos o valor do frete por item dividindo o valor total do frete pelo número total de itens no pedido.
Adicionamos o valor do frete por item ao total do frete.
No final, ajustamos o total do frete para garantir que a soma de todos os valores de frete por item seja igual ao total do frete original.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...