Ir para conteúdo
gersonab

função de comparação com multiplos de 5

Recommended Posts

boa tarde

tem como simplificar criando uma função e ou outra forma para se fazer uma comparação dos múltiplos de 5 de 5 a 200 por exemplo ?

assim até funciona mas fica algo .......

////$a = 5, $b = 10 e assim por diante até 200

if ($metros > 5 && $metros <= 10){
	$mtr = bcsub($b, $metros, 3);
	$va01 = $mtr*$valorm;
	} else if ($metros > 10 && $metros <= 15){
	$mtr = bcsub($c, $metros, 3);
	$va01 = $mtr*$valorm;
    +++++++++++++++
	} else if ($metros > 195 && $metros <= 200){
	$mtr = bcsub($d, $metros, 3);
	$va01 = $mtr*$valorm;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tentei assim:

 

<?php
$metros=7;
$valorm=7;
echo "<table><th>metros<th>mtr<th>va01";
for($i=5;$i<=200;$i=$i+5){
    if ($metros > $i && $metros <= $i+5){
	    $mtr = bcsub($i, $metros, 3);
	    $va01 = $mtr*$valorm;
        echo "<tr><td>".$metros."<td>".$mtr."<td>".$va01;}}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá!
Não fui capaz de entender a questão
 

On 10/15/2023 at 3:51 PM, gersonab said:

if ($metros > 5 && $metros <= 10){

Nesse if, não vai ser considerado o 5, apenas os 6, 7, 8, 9 e 10
e 6, 7, 8, e 9, não são múltiplos de 5

Consegue descrever melhor o que precisa ser feito?

Compartilhar este post


Link para o post
Compartilhar em outros sites

preciso fazer uma comparação utilizando múltiplos de 5 tipo :

if ($mtgt > 5 && $mtgt <= 10){
	$mtr = bcsub(10, $mtgt, 3);
	$va01 = $mtr*$valorm;
	} else if ($mtgt > 10 && $mtgt <= 15){
	$mtr = bcsub(15, $mtgt, 3);
	$va01 = $mtr*$valorm;
	} else if ($mtgt > 15 && $mtgt <= 20){
	$mtr = bcsub(20, $mtgt, 3);
	$va01 = $mtr*$valorm;
	} else if ($mtgt > 20 && $mtgt <= 25){
	$mtr = bcsub(25, $mtgt, 3);
	$va01 = $mtr*$valorm;
      // indo até 200 por exemplo, imagina o tamanho ......

se o mtgt for 7 , aí o mtr será igual a 3, se for 171 o mtr vai ser 4 , espero que tenha entendido , pode ter algo mais simples de fazer, mas ainda não encontrei ....

Compartilhar este post


Link para o post
Compartilhar em outros sites
16 horas atrás, gersonab disse:

não deu, eu coloquei 171 metros e o resultado foi :

mtr = 1 deveria ser 4
va01 = 7 deveria ser 28


Obrigado por me corrigir, eu mudei o código:

<?php
$metros=171;
$valorm=7;
echo "<table><th>metros<th>mtr<th>va01";
for($i=5;$i<=200;$i=$i+5){
    if ($metros > $i && $metros <= $i+5){
	    $mtr = bcsub($i+5, $metros, 3);
	    $va01 = $mtr*$valorm;
        echo "<tr><td>".$metros."<td>".$mtr."<td>".$va01;}}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tb não entendi foi nada!
Onde entra o múltiplo de 5? Pra que serve o múltiplo de 5 nesse contexto?
 

15 horas atrás, gersonab disse:

se o mtgt for 7 , aí o mtr será igual a 3, se for 171 o mtr vai ser 4 , espero que tenha entendido

já que 7, 3, 171 e 4 não são múltiplos de 5


e o intervalo

15 horas atrás, gersonab disse:

} else if ($mtgt > 10 && $mtgt <= 15){

vai cobrir os números 11, 12, 13 e 14 q também não são múltiplos de 5

Compartilhar este post


Link para o post
Compartilhar em outros sites

funcionou, obrigado.

explicando, em uma obra quantas placas de 5 metros quadrado vou precisar para cobrir 171 metros ?

serão necessárias 35 placas.
e essa sobra de 4 metros quadrados ? vai ser cobrada como ? normal ou preço de custo ?

apenas para definir a sobra de material.

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, gersonab disse:

funcionou, obrigado.

explicando, em uma obra quantas placas de 5 metros quadrado vou precisar para cobrir 171 metros ?

serão necessárias 35 placas.
e essa sobra de 4 metros quadrados ? vai ser cobrada como ? normal ou preço de custo ?

apenas para definir a sobra de material.


Valeu pela explicação, eu fiquei preso na função do PHP bcsub( ), ainda não sei como usá-la. A equação que eu montei foi baseada no famoso método da tentativa e erro, assim, eu recomendo fazer mais testes antes de tornar oficial no código. Outro problema do meu código é que ele faz muitos ciclos, ou seja, trata-se de uma gambiarra. Ele não merece o rótulo de acadêmico.

Compartilhar este post


Link para o post
Compartilhar em outros sites
<style>
  *{
    font-family: sans-serif;
  }
</style>
<?php

// SCRIPT PARA CALCULAR QUANTAS PLACAS DE Xm² cabem num espaço de Ym²
// e quantas placas adicionais serão necessárias para cobrir o espaço restante, se existir

// plate's size in m²
$platesSize = 5;

// total area to cover in m²
$totalArea = 171;

// calc how many complete plates are needed to cover the area
$completePlatesNeeded = floor($totalArea / $platesSize);

// calc uncovered area
$uncoveredAreaSize = $totalArea % $platesSize;

echo "<p>Área total: <b>{$totalArea}m²</b></p>";
echo "<p>Tamanho de cada placa: <b>{$platesSize}m²</b></p>";
echo "<p>Placas completas necessárias: <b>{$completePlatesNeeded}</b></p>";
echo "<p>Área restante não coberta: <b>{$uncoveredAreaSize}m²</b></p>";

// if unvered area exists, calculate how many plates are needed
if ($uncoveredAreaSize > 0) {
  $adicionalPlatesNeeded = ceil($uncoveredAreaSize / $platesSize);
  echo "<p>Placas adicionais necessárias: <b>{$adicionalPlatesNeeded}</b></p>";
}

4VmxNJvcTCOx3yTuVnj_6Q.png

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Wash, realmente muito bom, porém a área restante ela tem q ser igual a 4 que é o q falta para completar 175 ....  olha só o q fiz aqui agora antes de ver sua resposta ...

$metros=171;
$valorm=7;
$pl = $metros / 5;
echo $pl."<br>";
$px = ceil($pl);
echo $px."<br>";
$pc = $px * 5;
echo $pc."<br>";
$total = $pc - $metros;
echo $total."<br>";
$valsobra = $total*$valorm;
echo $valsobra;

sem laço sem nada e simples.

Compartilhar este post


Link para o post
Compartilhar em outros sites
11 horas atrás, gersonab disse:

a área restante ela tem q ser igual a 4 que é o q falta para completar 175

Desculpa me intrometer, mas se a área a ser preenchida é de 171m²
foram usadas 34 placas de 5m²
34 x 5m² = 170m²
logo falta apenas 1m² para completar a área total sugerida de 171m²
Até então 175m² não existia na equação.
Afinal, de onde o sr. tirou esse 175m²???

Ficou meio fora de contexto
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cada placa tem 5 m², preciso do total de placas utilizadas, o serviço é por metro quadrado, preciso da sobra para um novo cálculo, tipo:
171 m² - cada metro vale R$ 10,00 os 4 de sobra valem R$ 5,00 para compensar a perda.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 18/10/2023 at 18:54, tetsuo disse:

Desculpa me intrometer, mas se a área a ser preenchida é de 171m²
foram usadas 34 placas de 5m²
34 x 5m² = 170m²
logo falta apenas 1m² para completar a área total sugerida de 171m²
Até então 175m² não existia na equação.
Afinal, de onde o sr. tirou esse 175m²???

Ficou meio fora de contexto
 


Baseado na sua observação, acredito que a melhor equação para calcular a sobra é essa:

 

<?php
$metros=172;
$placa=5;
$numero_placas=intval($metros/$placa)+(fmod($metros,$placa)!==0);
$sobra=$placa-fmod($metros,$placa);
echo "para cobrir $metros metros^2 vai ser preciso $numero_placas <br>
    placas de $placa metros^2, mas vai sobrar $sobra metros^2";

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos.
       
      Quando programava em DOS. utilizava algumas teclas de atalho para: SALVAR / EDITAR / EXCLUIR / IMPRIMIR.
      Por exemplo:
      Salvar ----> ALT+S
      Editar ----> ALT+E
      Excluir --> ALT+X
      Imprimir -> ALT+I

      no PHP tem como colocar esses ATALHOS nos button, para o usuário trabalhar com esses atalhos e como seria ?

      grato,
       
      Cesar
    • Por violin101
      Caros Amigos, saudações.
       
      Por favor, me perdoa em postar uma dúvida.
       
      Preciso criar uma Rotina onde o usuário possa buscar na Base de Dados de Produtos, tanto por Código e Descrição, ou seja:
      - caso o usuário digita o Código, mostra os dados do Produto.
      - caso o usuário digita a Descrição, mostra os dados do Produto
       
      Fiz uma Rotina, onde o usuário digita a DESCRIÇÃO com a função AUTOCOMPLETE.    <=== está funcionando certinho.
       
      Minha dúvida é como faço para DIGITAR o Código e mostrar os dados também.
       
      o meu AutoComplete na MODEL está assim.
      public function autoCompleteProduto($q){ $this->db->select('*' ) ->from('produtos') ->where('produtos.statusProd',1) ->like('descricao', $q) ->limit(5) ->order_by('descricao', 'ASC'); $query = $this->db->get(); if ($query->num_rows() > 0) { foreach ($query->result_array() as $row) { $row_set[] = ['label' => str_pad($row['idProdutos'], '5', '0', STR_PAD_LEFT).' - '.$row['descricao'], 'id' => $row['idProdutos'], 'descricao' => $row['descricao'], 'cod_interno' => $row['cod_interno'], 'prd_unid' => $row['prd_unid'], 'estoque_atual' => $row['estoque_atual'] ]; } echo json_encode($row_set); } }  
       
      no CONTROLLER está assim:
      public function autoCompleteProduto() { $this->load->model('estoque/lancamentos_model'); if (isset($_GET['term'])) { $q = strtolower($_GET['term']); $this->lancamentos_model->autoCompleteProduto($q); } }  
       
      na VIEW está assim:
      <div class="col-md-10"> <label for="idProdutos">Produto:</label> <input type="hidden" name="idProdutos" id="idProdutos"> <input type="text" class="form-control" id="descricao" name="descricao" style="font-size:15px; font-weight:bold;" placeholder="Pesquisar por descrição do produto" disabled> </div>  
      VIEW + JAVASCRIPT
       
      //Função para trazer os Dados pelo o AutoComplete. function resolveAutocomplete() { $("#descricao").autocomplete({ source: "<?php echo base_url(); ?>estoque/lancamentos/autoCompleteProduto/", minLength: 2, select: function (event, ui) { $("#idProdutos").val(ui.item.id); $("#cod_interno").val(ui.item.cod_interno); $("#descricao").val(ui.item.descricao); $("#prd_unid").val(ui.item.prd_unid); $("#estoque_atual").val(ui.item.estoque_atual); $("#qtde").focus(); } }); } // inicia o autocomplete resolveAutocomplete();  
      Grato,
       
      Cesar
    • Por belann
      Olá!
       
      Estou tentando criar um projeto laravel e está dando o seguinte erro 
      curl error 60 while downloading https://getcomposer.org/versions: SSL certificate problem: unable to get local issu
        er certificate
      Já tentei atualizar o composer, mas dá o mesmo erro acima.
    • Por violin101
      Caros amigos, saudações.
       
      Estou com uma dúvida de validação de INPUT com função moeda.
       
      Tenho um input onde o usuário digita um valor qualquer, por exemplo: 1.234,56
      o problema é quando precisa atualizar o valor.
       
      Quando o usuário atualizar o input fica assim: 1.234,
       
      como faço para atualizar as casas decimais, conforme o valor for sendo alterado ?
       
      o input está assim:
       
      <div class="col-md-2"> <label for="">Valor Unitário</label> <input type="text" class="form-control" id="estoqprod" name="estoqprod" style="font-size:15px; font-weight:bold; width:100%; text-align:center;" placeholder="0,00" OnKeyUp="calcProd();" onkeypress="return(FormataMoeda(this,'.',',',event))" > </div>  
      a função para formatar o input para moeda está assim:
      obs.: a Função CalcProd está executando corretamente
      function calcProd(){ //Obter valor digitado do produto var estoq_prod = document.getElementById("estoqprod").value; //Remover ponto e trocar a virgula por ponto while (estoq_prod.indexOf(".") >= 0) { estoq_prod = estoq_prod.replace(".", ""); } estoq_prod = estoq_prod.replace(",","."); //Obter valor digitado do produto var prod_qtde = document.getElementById("qtde").value; //Remover ponto e trocar a virgula por ponto while (prod_qtde.indexOf(".") >= 0) { prod_qtde = prod_qtde.replace(".", ""); } prod_qtde = prod_qtde.replace(",","."); //Calcula o Valor do Desconto if (prod_qtde > 0 && estoq_prod > 0) { calc_total_produto = parseFloat(prod_qtde) - parseFloat(estoq_prod); var numero = calc_total_produto.toFixed(2).split('.'); //Calculo para não deixar GRAVAR valores negativos if (calc_total_produto < 0 ) { numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.') * -1; document.getElementById("qtdeTotal").value = numero.join(','); } else { numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.'); document.getElementById("qtdeTotal").value = numero.join(','); } } else { if (estoq_prod > 0) { document.getElementById("qtdeTotal").value = document.getElementById("estoqprod").value; } else { document.getElementById("qtdeTotal").value = "0,00"; } } } /*---Função para Formatar Campo para Moeda [R$]---*/ function FormataMoeda(objTextBox, SeparadorMilesimo, SeparadorDecimal, e){ var sep = 0; var key = ''; var i = j = 0; var len = len2 = 0; var strCheck = '0123456789'; var aux = aux2 = ''; var whichCode = (window.Event) ? e.which : e.keyCode; if (whichCode == 13) return true; key = String.fromCharCode(whichCode); // Valor para o código da Chave if (strCheck.indexOf(key) == -1) return false; // Chave inválida len = objTextBox.value.length; for(i = 0; i < len; i++) if ((objTextBox.value.charAt(i) != '0') && (objTextBox.value.charAt(i) != SeparadorDecimal)) break; aux = ''; for(; i < len; i++) if (strCheck.indexOf(objTextBox.value.charAt(i))!=-1) aux += objTextBox.value.charAt(i); aux += key; len = aux.length; if (len == 0) objTextBox.value = ''; if (len == 1) objTextBox.value = '0'+ SeparadorDecimal + '0' + aux; if (len == 2) objTextBox.value = '0'+ SeparadorDecimal + aux; if (len > 2) { aux2 = ''; for (j = 0, i = len - 3; i >= 0; i--) { if (j == 3) { aux2 += SeparadorMilesimo; j = 0; } aux2 += aux.charAt(i); j++; } objTextBox.value = ''; len2 = aux2.length; for (i = len2 - 1; i >= 0; i--) objTextBox.value += aux2.charAt(i); objTextBox.value += SeparadorDecimal + aux.substr(len - 2, len); } return false; }  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Estou com uma dúvida de validação de INPUT com função moeda.
       
      Tenho um input onde o usuário digita um valor qualquer, por exemplo: 1.234,56
      o problema é quando precisa atualizar o valor.
       
      Quando o usuário atualizar o input fica assim: 1.234,
       
      como faço para atualizar as casas decimais, conforme o valor for sendo alterado ?
       
      o input está assim:
       
      <div class="col-md-2"> <label for="">Valor Unitário</label> <input type="text" class="form-control" id="estoqprod" name="estoqprod" style="font-size:15px; font-weight:bold; width:100%; text-align:center;" placeholder="0,00" OnKeyUp="calcProd();" onkeypress="return(FormataMoeda(this,'.',',',event))" > </div>  
      a função para formatar o input para moeda está assim:
      obs.: a Função CalcProd está executando corretamente
      function calcProd(){ //Obter valor digitado do produto var estoq_prod = document.getElementById("estoqprod").value; //Remover ponto e trocar a virgula por ponto while (estoq_prod.indexOf(".") >= 0) { estoq_prod = estoq_prod.replace(".", ""); } estoq_prod = estoq_prod.replace(",","."); //Obter valor digitado do produto var prod_qtde = document.getElementById("qtde").value; //Remover ponto e trocar a virgula por ponto while (prod_qtde.indexOf(".") >= 0) { prod_qtde = prod_qtde.replace(".", ""); } prod_qtde = prod_qtde.replace(",","."); //Calcula o Valor do Desconto if (prod_qtde > 0 && estoq_prod > 0) { calc_total_produto = parseFloat(prod_qtde) - parseFloat(estoq_prod); var numero = calc_total_produto.toFixed(2).split('.'); //Calculo para não deixar GRAVAR valores negativos if (calc_total_produto < 0 ) { numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.') * -1; document.getElementById("qtdeTotal").value = numero.join(','); } else { numero[0] = numero[0].split(/(?=(?:...)*$)/).join('.'); document.getElementById("qtdeTotal").value = numero.join(','); } } else { if (estoq_prod > 0) { document.getElementById("qtdeTotal").value = document.getElementById("estoqprod").value; } else { document.getElementById("qtdeTotal").value = "0,00"; } } } /*---Função para Formatar Campo para Moeda [R$]---*/ function FormataMoeda(objTextBox, SeparadorMilesimo, SeparadorDecimal, e){ var sep = 0; var key = ''; var i = j = 0; var len = len2 = 0; var strCheck = '0123456789'; var aux = aux2 = ''; var whichCode = (window.Event) ? e.which : e.keyCode; if (whichCode == 13) return true; key = String.fromCharCode(whichCode); // Valor para o código da Chave if (strCheck.indexOf(key) == -1) return false; // Chave inválida len = objTextBox.value.length; for(i = 0; i < len; i++) if ((objTextBox.value.charAt(i) != '0') && (objTextBox.value.charAt(i) != SeparadorDecimal)) break; aux = ''; for(; i < len; i++) if (strCheck.indexOf(objTextBox.value.charAt(i))!=-1) aux += objTextBox.value.charAt(i); aux += key; len = aux.length; if (len == 0) objTextBox.value = ''; if (len == 1) objTextBox.value = '0'+ SeparadorDecimal + '0' + aux; if (len == 2) objTextBox.value = '0'+ SeparadorDecimal + aux; if (len > 2) { aux2 = ''; for (j = 0, i = len - 3; i >= 0; i--) { if (j == 3) { aux2 += SeparadorMilesimo; j = 0; } aux2 += aux.charAt(i); j++; } objTextBox.value = ''; len2 = aux2.length; for (i = len2 - 1; i >= 0; i--) objTextBox.value += aux2.charAt(i); objTextBox.value += SeparadorDecimal + aux.substr(len - 2, len); } return false; }  
      Grato,
       
      Cesar
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.