Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

vonzuben

Formatação de cálculo

Recommended Posts


<?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

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

×

Informação importante

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