Mário Miranda Postado Abril 3, 2007 Denunciar Share Postado Abril 3, 2007 Bom dia pessoal.Tenho uma aplicação que faz uma conta para se obter o total a ser pago a alguém que é assim:$valor_total=$valor * $porcentagem / 100;para $valor = 55.94 e para $porcentagem = 3.Essa conta daria 1.6782.PReciso que o resultado seja convertido para 1.67 , tentei usar o round, mas ele arredonda pra mais. Preciso que o valor seja 1.67.Obrigado e até+ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Abril 3, 2007 Denunciar Share Postado Abril 3, 2007 Você não quer arredondar na verdade... quer apenas corta as casas excedentes, bom você pode usar o number_format, só que ele também vai alterar o número, pois pelo próprio exemplo ele usa regra de arredondamento, para pegar apenas os 2 números após o ponto você pode quebra a variável no ponto e usar substr para pegar apenas as 2 primeiras casas após o ponto e ai juntar tudo de novo... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Mário Miranda Postado Abril 3, 2007 Autor Denunciar Share Postado Abril 3, 2007 você tem algum exemplo de number_format?Eu não estou conseguindo utiliza-lo.Obrigado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Abril 3, 2007 Denunciar Share Postado Abril 3, 2007 O manual já tem um exemplo que se enquadra no que você quer é a "Notação Inglesa com separador de milhar", abaixo o exemplo com o número que você passou:<?php $number = 1.6782; // Notação Inglesa com separador de milhar $english_format_number = number_format($number, 2, '.', ''); echo $english_format_number; ?> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Mário Miranda Postado Abril 3, 2007 Autor Denunciar Share Postado Abril 3, 2007 Pode cre. Desculpa a falta de atenção.Mas você viu que o numero é 1.6782. Na formatação ele fica como 1.68.Tem como fazer com que ele não fique 1.68 e sim 1.67? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Abril 3, 2007 Denunciar Share Postado Abril 3, 2007 Como eu disse no meu primeiro post, o number_format também usa as regras de arredondamento... se você quer o número sem regra nenhuma vai ter que usar o explode para dividir o número no ponto e ai usar o substr para pega apenas as 2 casas iniciais do que tiver depois do ponto... ai você junta tudo usando o implode. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Mário Miranda Postado Abril 3, 2007 Autor Denunciar Share Postado Abril 3, 2007 Até a parte do explode, está tudo ok.Mas agora, no implode está dando um erro...não consigo juntar os numeros no meu teste.Olha só o codigo:<?php$number1 = 1.6782;// Notação Inglesa com separador de milhar$english_format_number = number_format($number, 2, '.', '');//echo $english_format_number;$number2=explode(".",$number1);echo $number2[0];//primeira parte antes do "."echo"<br>";$num2=$number2[1];$num3=substr($num2,0,2);echo $num3;$decimal=$number2[1];//a partir daqui usei o implode mas está dando erro?>Para juntar os valores para que fique 1.67 , você pode deixar mais claro o funcionamento do implode? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Abril 3, 2007 Denunciar Share Postado Abril 3, 2007 O implode junta elementos de um array... logo você tem que substituir o valor o $number2[1] pelo novo valor, pois é ele que vai ser chamado no implode...<?php $number1 = 1.6782; $number2=explode(".",$number1); $number2[1]=substr($number2[1],0,2); //a partir daqui usei o implode mas está dando erro $numero_novo = implode(".", $number2); echo "Número novo: $numero_novo"; ?> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Mário Miranda Postado Abril 3, 2007 Autor Denunciar Share Postado Abril 3, 2007 Agora deu pra enteder.Muito obrigado E Serra!Até + Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 CSML sistemas Postado Abril 3, 2007 Denunciar Share Postado Abril 3, 2007 Não seria mais fácil fazer o seguinte:$resultado_esperado = floor($valor_a_ajustar * 100) / 100;??? B) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Abril 3, 2007 Denunciar Share Postado Abril 3, 2007 Não seria mais fácil fazer o seguinte:$resultado_esperado = floor($valor_a_ajustar * 100) / 100;??? B)É que na verdade ele não quer arredondar nada... ele quer pegar apenas as 2 casas decimais a direita do ponto... e floor arredonda pra baixo logo 1.6782 viraria 1 e não 1.67 que é a necessidade dele... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 CSML sistemas Postado Abril 3, 2007 Denunciar Share Postado Abril 3, 2007 Veja que eu estou propondo um floor do número que ele obteve multiplicado por 100...$resultado_esperado = floor($valor_a_ajustar * 100) / 100; ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 ESerra Postado Abril 3, 2007 Denunciar Share Postado Abril 3, 2007 É verdade... dá na mesma... Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Mário Miranda
Bom dia pessoal.
Tenho uma aplicação que faz uma conta para se obter o total a ser pago a alguém que é assim:
$valor_total=$valor * $porcentagem / 100;
para $valor = 55.94 e para $porcentagem = 3.
Essa conta daria 1.6782.
PReciso que o resultado seja convertido para 1.67 , tentei usar o round, mas ele arredonda pra mais. Preciso que o valor seja 1.67.
Obrigado e até+
Link para o comentário
Compartilhar em outros sites
12 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.