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

Erro No Cálculo


dev

Pergunta

Olá !

Preciso fazer uma divisão com valores decimais (R$), já fiz isso antes e deu certo, ams agora estou com problema...

Estou usando o seguinte código (coloquei alguns "echo" para saber onde o valor está se perdendo):

$valor = str_replace('R$','',$products_price); // $valor está aparecndo certinho: 199,00

$valor1 = ($valor / 10); // aqui está aparecendo zerado: 0

$valor2 = number_format($valor1,2,",","."); // aqui também está zerado: 0,00

?>

10 x de R$

<? echo $valor .'<br>';

echo $valor1 .'<br>';echo $valor2 .'<br>';

?>

Se puderem me ajudar, agradeço muito.

Abraço.

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

Olá, Eserra.

Obrigada pela atenção.

Realmente não havia notado isso, no outro código que usei está sem a vírgula mesmo.

NO entanto, eu mudei 199,00 para 199.00 (com substr_replace) e continua com o valor zerado...

Acho que localizei o erro... (só falta a solução :rolleyes: )

$valor = str_replace('R$','',$products_price); // aqui está certo (199,00)

$ca1 = str_replace(',','.',$valor); // certo (199.00)

// na linha abaixo, se coloco 199.00 no lugar do $ca1, dá certo!

// então, imagino que o problema seja a perda da informação do $ca1, mas como é possível?

// testei o seguinte: $valor3 = $ca1; e apareceu o valor correto

$valor1 = ($ca1 / 10); // errado (0) também tentei sem os ()

Abraço

Editado por dev
Link para o comentário
Compartilhar em outros sites

  • 0

Tente assim:

$ca1 = (double) str_replace(',','.',$valor);

Só lembre-se de uma coisa: se o número antes da chamada a str_replace for 1.520,00, haverá erro também, pois str_replace retornará 1.520.00 (dois separadores decimais). Prefira manter os números formatados corretamente, sem fazer gambiarras. ;)

Abraços,

Beraldo

Link para o comentário
Compartilhar em outros sites

  • 0

Olá, Beraldo.

Agradeço muito por suas dicas.

O valor que estou pegando vem do BD e não tem como eu gravar de outra forma, pois teria que mudar muito mais coisas no site que já peguei assim.

No caso, o valor vem como R$ 199,00 e o $ca1 está 199.00 (não usa separador de milhares).

Não entendo por que o valor do $ca1 está se perdendo... nunca tinha visto isso...

Link para o comentário
Compartilhar em outros sites

  • 0

O Problema é que uma string puxada do banco de dados sempre retorna como string e não integer (ou double no caso).

Resolver isso é muito simples.

Tente desta forma:


$valor = str_replace('R$','',$products_price); // aqui está certo (199,00)
$ca1 = str_replace(',','.',$valor); // certo (199.00)
//A linha abaixo converte o preço para o tipo integer (ou float se existirem decimais)
$ca1++; $ca1--; //Por que usar esse modo ao invés do settype? O settype dá erro de vez em quando retornando 1 (Ou true) ao invés de retornar os resultados esperados
$valor1 = ($ca1 / 10); // Aqui aparecia zero pois a tring não era integer (0) e 0/10 = 0 ;)
$valor1 = number_format($valor1,2,',','.'); //Formata o número e arredonda (199,75 -> 19,975 -> 19,80)
echo "R$ ".$valor1[/codebox]

Espero que seja isso =)

Link para o comentário
Compartilhar em outros sites

  • 0

A função settype() sempre retorna um valor booleano, nunca retorna o valor da variável. ;)

Você pode usar settype desta forma:

$n = "1.99";
settype ($n, "double");//ou float

Isso equivale ao método que postei (colocando o tipo entre parênteses), que é chamado de casting. ;)

Abraços,

Beraldo

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigada, Filipe Kiss e novamente ao Beraldo.

Nossa, vocês conhecem mesmo, hein! Nem imaginava que existe todos esses "detalhes".

Bem, tentei das 2 maneiras, mas, obviamente por ignorância minha, não deu certo ainda...

Ficou assim (usando o valor R$ 10,00): (estou colocando no comentário, o que apareceu no print)

$valor = str_replace('R$','',$products_price); //10,00

$ca1 = str_replace(',','.',$valor); // 0

$n = settype ($ca1, "double");// 1

$valor1 = $n / 10; // 0.1

$valor2 = number_format($ca1,2,",","."); //0,00

$valor3 = $ca1; // 0

E assim:

$valor = str_replace('R$','',$products_price); // 10,00

$ca1 = str_replace(',','.',$valor); // 10.01

$ca1++; $ca1--;

$valor1 = ($ca1 / 10); // 0

$valor2 = number_format($valor1,2,',','.'); // 0,00

Abraços.

Editado por dev
Link para o comentário
Compartilhar em outros sites

  • 0

Olá !

Vocês têm toda razão, o código de vocês está correto.

Agora funcionou !

Que vergonha... mas tenho que assumir... o erro foi meu e daqueles muito bobos !

O erro estava na chamada do valor, é que no lugar de 'R$' eu tinha que colocar 'R$ ' (um espaço após o cifrão).

Agora o calculo está certinho.

MUITO OBRIGADA pela ajuda !!!!

Valeu mesmo.

Abraços ;)

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...