vonzuben 12 Denunciar post Postado Agosto 11, 2013 <?php $valor = 'R$ 5.000,00'; $valor_aplicacao = substr($valor,2); ?> <td><?php $porcentagem = 40 / 100; $resultado = $porcentagem * $valor_aplicacao; if($resultado == ''){ echo 'R$ 1.000,00'; } else{ echo $resultado; }?></td> <td><?php $porcentagem = 40 / 100; $resultado = $valor_aplicacao + ($porcentagem * $valor_aplicacao); if($resultado == ''){ echo 'R$ 1.000,00'; } else{ echo $resultado; }?></td> resultado está saindo 2 e 7 o correto é 2.000,00 e 7.000,00 coloquei number_format($resultado, 2, ',', '.' e saiu 2,00 e 7,00 tem algum erro de formatação Compartilhar este post Link para o post Compartilhar em outros sites
rider.dodeca 1 Denunciar post Postado Agosto 11, 2013 Amigo o principal motivo do erro é que sua variável $valor está recebendo uma string 'R$ 5.000,00', tente enviar apenas inteiros para cálculo e lembre-se que o padrão de números do PHP reconhece o '.' como separador de centavos. Isso explica os resultados 2 e 7 é que você chegou a eliminar o R$ com a função substr: $valor = 'R$ 5.000,00'; $valor_aplicacao = substr($valor,2); // resultado 5.000,00 Porém quando você multiplicou: $resultado = $porcentagem * $valor_aplicacao; O PHP automaticamente fez um type casting (mudança de tipo) da variável $valor_aplicação resultando em 5. Solução rápida (somente se valor não puder vir como inteiro) Tire a função substr e coloque a str_replace no lugar: $valor='R$ 5.000,00' $tratamento=array('R$', '.'); //faz selecao do que se quer tirar $valor_aplicacao = str_replace($tratamento,"",$valor); //resultado 5000,00, na conversão o compilador vai desconsiderar o ',00' gerando o 5000 Solução Correta Tomei a liberdade de alterar seu código com intuito de apresentar novas soluções e otimizar sua aplicação: $valor = 'R$ 5.000,00'; $tratamento=array('R$', '.'); //monto um array com o que não quero, porém deixo a vírgula para que no type casting se encarrege do resto $valor_aplicacao = str_replace($tratamento,"",$valor); // resultado 5000,00 $valor_aplicacao=(int)$valor_aplicacao;//resultado 5000, a variável está pronta para trabalhar, caso consiga trazer ao programa sem R$ pode eliminar as variaveis acima /* * Reduza sua quantidade de variáveis o porcentagem foi trocado por 0.4 agilizando o processo de cálculo e armazenamento na memória * Vale lembrar que o resultado só dá 0 se valor_aplicacao for 0 então não preciso comparar resultado agora e sim valor_aplicacao */ $resultado = $valor_aplicacao <= 0 ? 1000 : 0.4 * $valor_aplicacao; //forma reduzida conhecida como operacao ternária http://php.net/manual/pt_BR/language.operators.comparison.php#language.operators.comparison.ternary echo $resultado; /*Se resultado for zero recebe resultado que recebeu 1000 anteriormente, caso contrário recebe ele+valor_aplicacao */ $resultado = $resultado <= 0 ? $resultado : $resultado+$valor_aplicacao; //se echo $resultado; Basta ajustar a sua aplicação. Espero ter ajudado. Grato! Amigo o principal motivo do erro é que sua variável $valor está recebendo uma string 'R$ 5.000,00', tente enviar apenas inteiros para cálculo e lembre-se que o padrão de números do PHP reconhece o '.' como separador de centavos. Isso explica os resultados 2 e 7 é que você chegou a eliminar o R$ com a função substr: $valor = 'R$ 5.000,00'; $valor_aplicacao = substr($valor,2); // resultado 5.000,00 Porém quando você multiplicou: $resultado = $porcentagem * $valor_aplicacao; O PHP automaticamente fez um type casting (mudança de tipo) da variável $valor_aplicação resultando em 5. Solução rápida (somente se valor não puder vir como inteiro) Tire a função substr e coloque a str_replace no lugar: $valor='R$ 5.000,00' $tratamento=array('R$', '.'); //faz selecao do que se quer tirar $valor_aplicacao = str_replace($tratamento,"",$valor); //resultado 5000,00, na conversão o compilador vai desconsiderar o ',00' gerando o 5000 Solução Correta Tomei a liberdade de alterar seu código com intuito de apresentar novas soluções e otimizar sua aplicação: $valor = 'R$ 5.000,00'; /* monto um array com o que não quero, porém deixo a vírgula para que no type casting se encarrege do resto */ $tratamento=array('R$', '.'); $valor_aplicacao = str_replace($tratamento,"",$valor); // resultado 5000,00 $valor_aplicacao=(int)$valor_aplicacao;//resultado 5000, a variável está pronta para trabalhar, caso consiga trazer ao programa sem R$ pode eliminar as variaveis acima /* * Reduza sua quantidade de variáveis o porcentagem foi trocado por 0.4 agilizando o processo de cálculo e armazenamento na memória * Vale lembrar que o resultado só dá 0 se valor_aplicacao for 0 então não preciso comparar resultado agora e sim valor_aplicacao */ $resultado = $valor_aplicacao <= 0 ? 1000 : 0.4 * $valor_aplicacao; //forma reduzida conhecida como operacao ternária. echo $resultado; /*Se resultado for zero recebe resultado que recebeu 1000 anteriormente, caso contrário recebe ele+valor_aplicacao */ $resultado = $resultado <= 0 ? $resultado : $resultado+$valor_aplicacao; echo $resultado; Basta ajustar a sua aplicação, faça um teste antes e use o number_format ou outra função que desejar para tratar o resultado. Espero ter ajudado. Grato! Compartilhar este post Link para o post Compartilhar em outros sites