Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite pessoal,
Seguinte.. quem aqui usa ou usou o excel sabe o que eu quero...
Quero cadastrar no banco de dados uma tabela de impostos.. so que nela.. eu quero fornecer a formula de aplicação do imposto... assim:
IMPOSTO / FORMULA
pis / (valor)*0.25
cofins / (valor)*0.08
ai no php eu conseguir ler essa formula e aplica-la na pratica.. qual solução pra isso vcs teriam?
vlw
Use a função eval
Mas use APENAS se você conhecer exatamente o que será a entrada.
<?php
$valor = 100;
// vamos supor que veio do banco de dados
$pis = '( %valor% ) * 0.25';
$cofins = '( %valor% ) * 0.08';
$pis = str_replace( '%valor%', $valor, $pis ); // altera %valor% pelo $valor
$cofins = str_replace( '%valor%', $valor, $cofins ); // altera %valor% pelo $valor
echo eval( "return $pis;" ); // 25
echo '<br/>';
echo eval( "return $cofins;" ); // 8
?>Eai pessoal,
>
no próprio banco de dados dá pra fazer os cálculos e retornar o valor de acordo com a tabela de impostos.
Victor Cometti
Como faria isso, com procedures?? estou usando o Postgree..
Use a função eval
Mas use APENAS se você conhecer exatamente o que será a entrada.
<?php
$valor = 100;
// vamos supor que veio do banco de dados
$pis = '( %valor% ) * 0.25';
$cofins = '( %valor% ) * 0.08';
$pis = str_replace( '%valor%', $valor, $pis ); // altera %valor% pelo $valor
$cofins = str_replace( '%valor%', $valor, $cofins ); // altera %valor% pelo $valor
echo eval( "return $pis;" ); // 25
echo '<br/>';
echo eval( "return $cofins;" ); // 8
?>
Carlos Coelho,
Cara.. vlw mesmo.. to quase terminando a função.. vou posta-la aqui.. muita gente vai gostar.. hehehe
procedure é uma boa opção
passa o valor e ela te retorna o cáculo pesquisando na tabela de impostos
ou até mesmo na própria query
eu particularmente prefiro fazer o máximo no banco e entregar o mais mastigado para o PHP.
O froids é que não quero ter que ficar dando manutenção toda vez que um imposto mudar de formula.. e pior.. pra cada estado o imposto é de um jeito... ai prefiro cadastrar no banco.. e fazer a parada acontecer....
curte.. fiz funcionar..
<?php
function check_syntax($str) {
$number = "\d+(\.\d+)?";
$ident = "[a-z]\w*";
$atom = "[+-]?($number|$ident)";
$op = "[+*/-]";
$sexpr = "$atom($op$atom)*"; // simple expression
$str = preg_replace('~\s+~', '', $str);
$par = "~\($sexpr\)~";
$exp = array();
while(preg_match($par, $str)){
preg_match($par, $str, $matches);
$exp[] = $matches[0];
$str = preg_replace($par, 'x', $str);
}
$return = preg_match("~^$sexpr$~", $str);
if($return){
return $exp;
} else {
return false;
}
}
function resolve_syntax($s){
$result = '';
foreach($s as $k){
$k = str_replace('x', $result, $k);
$result = eval( "return ".$k.";" );
}
return $result;
}
$tests = array(
"((( 80300 0.08 - 60000 ) 0.25 ) + 60000 * 0.15)",
"(803000.080.15)"
);
foreach($tests as $t){
$syntax = check_syntax($t);
echo resolve_syntax($syntax)."<br/>\n";
}
?>
so que agora quero ir alem... hehehe
como posso fazer o php interpretar condicionais.. assim:
$var = 'if(9>8);resolv_syntax('(9*8)');resolve_syntax('(9-9+9)');';
tipo assim como no excel.. eu daria um explode pra separar as strings pelo ponto-e-virgula..
vendo que no primeiro tem um if.. o php tem que verificar se esse if da verdadeiro.. ai ele executa a função que esta no meio.. caso contrario ele executa a função que esta no fim...
vlw pessoal...
no próprio banco de dados dá pra fazer os cálculos e retornar o valor de acordo com a tabela de impostos.