dev Postado Março 20, 2007 Denunciar Share Postado Março 20, 2007 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Março 20, 2007 Denunciar Share Postado Março 20, 2007 O problema é a vírgula do número... o PHP não trabalha com vírgulas... remova ela usando substr-replace ou formata o número usando number_format. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 dev Postado Março 21, 2007 Autor Denunciar Share Postado Março 21, 2007 (editado) 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 Março 21, 2007 por dev Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Março 21, 2007 Denunciar Share Postado Março 21, 2007 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 dev Postado Março 21, 2007 Autor Denunciar Share Postado Março 21, 2007 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... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Março 21, 2007 Denunciar Share Postado Março 21, 2007 dê um print na $ca1 e veja o valor retornado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 dev Postado Março 21, 2007 Autor Denunciar Share Postado Março 21, 2007 então, eu já dei.tá certinho 199.00também coloquei $valor3 = $ca1 e também deu certo (199.00)O problema está quando coloco a / para dividir ou qualquer outra coisa junto... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Março 21, 2007 Denunciar Share Postado Março 21, 2007 Mesmo colocando o (double) como mostrei dá erro? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Filipe Kiss Postado Março 21, 2007 Denunciar Share Postado Março 21, 2007 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 =) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Março 21, 2007 Denunciar Share Postado Março 21, 2007 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 floatIsso equivale ao método que postei (colocando o tipo entre parênteses), que é chamado de casting. ;)Abraços,Beraldo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 dev Postado Março 21, 2007 Autor Denunciar Share Postado Março 21, 2007 (editado) 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; // 0E 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,00Abraços. Editado Março 21, 2007 por dev Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Março 22, 2007 Denunciar Share Postado Março 22, 2007 O settype() retornou true (1). Como eu disse, não se deve atribuir o valor retornado por settype() a uma variável. $ca1 = str_replace(',','.',$valor); settype ($ca1, "double"); $valor1 = $ca1 / 10; Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Filipe Kiss Postado Março 22, 2007 Denunciar Share Postado Março 22, 2007 (editado) Usando aquele código que eu fiz funcionou certinhowww.studiokiss.com.br/calculo.php ;) Editado Março 22, 2007 por Filipe Kiss Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 dev Postado Março 23, 2007 Autor Denunciar Share Postado Março 23, 2007 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 ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
dev
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):
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
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.