Carlos Rocha Posted February 9, 2014 at 04:11 PM Report #544555 Posted February 9, 2014 at 04:11 PM Pessoal, como faço para pegar a parte fracionária de um número? Exemplo: 19,2345 Ou 19,23 OU 27,3 preciso pegar tudo que esta depois da virgula. Obs.: a vírgula não entra. Mas gostaria de fazer isso com números inteiros, sem transformar em fração. É possível? Carlos Rocha
HappyHippyHippo Posted February 9, 2014 at 04:16 PM Report #544556 Posted February 9, 2014 at 04:16 PM (edited) $frac = substr(strpbrk($num, '.,'), 1); ps : , ou . como separador decimal Edited February 9, 2014 at 04:17 PM by HappyHippyHippo 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Carlos Rocha Posted February 9, 2014 at 04:18 PM Author Report #544558 Posted February 9, 2014 at 04:18 PM (edited) Mas ai converteu para string. gostaria de fazer sem converter. Como (int) mesmo. Será que tem como? No Delphi temos a função frac() Edited February 9, 2014 at 04:36 PM by carcleo
HappyHippyHippo Posted February 9, 2014 at 04:30 PM Report #544561 Posted February 9, 2014 at 04:30 PM sabes qual é a diferença entre uma string só com números e um número em PHP ? 2% ... $frac = (int) substr(strpbrk($num, '.,'), 1); IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Carlos Rocha Posted February 9, 2014 at 04:36 PM Author Report #544562 Posted February 9, 2014 at 04:36 PM Veja como estou tentando $tempoMedio= $paresSapatos/$horasTrabalho; $parteInteira = (int) $tempoMedio; $parteFracionaria = (int) substr($tempoMedio, strpos((string)$tempoMedio,',')+1,2); $parteFracionaria = round($parteFracionaria*60)/100;
HappyHippyHippo Posted February 9, 2014 at 04:41 PM Report #544563 Posted February 9, 2014 at 04:41 PM como queiras ... vou passar a dar sermões aos peixes que eles parecem dar mais atenção ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Carlos Rocha Posted February 9, 2014 at 04:57 PM Author Report #544565 Posted February 9, 2014 at 04:57 PM (edited) Me perdoe. Não queria fazer exatamente igual. Queria apenas uma orientação e estava a pensar nas opções. Obrigado pela ajuda, era isso que eu queria: <?php $paresSapatosProduzidos = array(); $totalHorasTrabalhadas = array(); function producao($sapatosProduzidos, $horasTrabalhadas) { $paresSapatos=0; $horasTrabalho=0; foreach ($sapatosProduzidos as $pares=> $values) { $paresSapatos+=$values; $horasTrabalho+=$horasTrabalhadas[$pares]; } $tempoMedio= $paresSapatos/$horasTrabalho; $parteInteira = (int) $tempoMedio; $parteFracionaria = (int) substr((string) $tempoMedio, strpos((string) $tempoMedio,'.')+1,2); $parteFracionaria = (int)(($parteFracionaria*60)/100); return $parteInteira." horas e ".$parteFracionaria." minutos."; } $paresSapatosProduzidos["João"]=10; $paresSapatosProduzidos["Tamar"]=15; $paresSapatosProduzidos["Antônio"]=10; $paresSapatosProduzidos["Tadeu"]=15; $horasTrabalhadas["João"]=8; $horasTrabalhadas["Tamar"]=10; $horasTrabalhadas["Antônio"]=8; $horasTrabalhadas["Tadeu"]=10; echo "O tempo médio necessário para se produzir um sapato pelo grupo de operários é: ".producao($paresSapatosProduzidos, $horasTrabalhadas); ?> Edited February 9, 2014 at 04:59 PM by carcleo
Carlos Rocha Posted February 9, 2014 at 05:08 PM Author Report #544566 Posted February 9, 2014 at 05:08 PM Aproveitando o tópico, como faço para saber o tamanho (strlen) de uma string a partir de um ponto?
HappyHippyHippo Posted February 9, 2014 at 05:14 PM Report #544567 Posted February 9, 2014 at 05:14 PM tens de ser mais específico no que toca ao que referes ser um ponto IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Carlos Rocha Posted February 9, 2014 at 05:16 PM Author Report #544568 Posted February 9, 2014 at 05:16 PM Porquê: $tamanho =strlen($tempoMedio)- strpos((string) $tempoMedio,'.')+1; print strlen($tempoMedio)."<br>"; // retorna 15 print strpos((string) $tempoMedio,'.')+1; // retorna 2 print "<br>"; print $tamanho."<br>"; // retorna 0
HappyHippyHippo Posted February 9, 2014 at 05:18 PM Report #544569 Posted February 9, 2014 at 05:18 PM (edited) [porque "ponto" pode ser referente a : - o caracter "ponto" (.) - um ponto qualquer do meio da string qual é realmente a tua dúvida ? Edited February 9, 2014 at 05:19 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Carlos Rocha Posted February 9, 2014 at 05:21 PM Author Report #544570 Posted February 9, 2014 at 05:21 PM (edited) Se um dá 15 e outro retorno 2. Porque a variável tamanho 15 - 2 = retorna 0? Edited February 9, 2014 at 05:22 PM by carcleo
HappyHippyHippo Posted February 9, 2014 at 05:28 PM Report #544571 Posted February 9, 2014 at 05:28 PM Se um dá 15 e outro retorno 2. Porque a variável tamanho 15 - 2 = retorna 0? qual o valor da variável $tempoMedio ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Carlos Rocha Posted February 9, 2014 at 05:30 PM Author Report #544572 Posted February 9, 2014 at 05:30 PM (edited) tempoMedio = 1.388888888888915 $tamanho = (int) strlen((string) $tempoMedio) - (int) strpos((string) $tempoMedio,'.')+1; print (int) strlen((string) $tempoMedio)."<br>"; // Retorna 15 print (int) strpos((string) $tempoMedio,'.')+1; echo "<br>"; // Retorna 2 print (int) strlen((string) $tempoMedio) - (int) strpos((string) $tempoMedio,'.')+1; echo "<br>"; // Retorna 0 print $tamanho."<br>"; // Retorna 0 Edited February 9, 2014 at 05:35 PM by carcleo
HappyHippyHippo Posted February 9, 2014 at 05:34 PM Report #544573 Posted February 9, 2014 at 05:34 PM apresenta o código todo (entre a primeira linha que apresentaste e a última) porque o problema não está no que é apresentado IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Carlos Rocha Posted February 9, 2014 at 05:36 PM Author Report #544574 Posted February 9, 2014 at 05:36 PM (edited) Ok, segue: <?php $paresSapatosProduzidos = array(); $totalHorasTrabalhadas = array(); function producao($sapatosProduzidos, $horasTrabalhadas) { $paresSapatos=0; $horasTrabalho=0; foreach ($sapatosProduzidos as $pares=> $values) { $paresSapatos+=$values; $horasTrabalho+=$horasTrabalhadas[$pares]; } $tempoMedio= $paresSapatos/$horasTrabalho; $parteInteira = (int) $tempoMedio; $tamanho = (int) strlen((string) $tempoMedio) - (int) strpos((string) $tempoMedio,'.')+1; print (int) strlen((string) $tempoMedio)."<br>"; // Retorna 15 print (int) strpos((string) $tempoMedio,'.')+1; echo "<br>"; // Retorna 2 print (int) strlen((string) $tempoMedio) - (int) strpos((string) $tempoMedio,'.')+1; echo "<br>"; // Retorna 0 print $tamanho."<br>"; // Retorna 0 if($tamanho>2) { $parteFracionaria = (int) substr((string) $tempoMedio, strpos((string) $tempoMedio,'.')+1,2); } else { $parteFracionaria = (int) substr((string) $tempoMedio, strpos((string) $tempoMedio,'.')+1,$tamanho); } $parteFracionaria = (int)(($parteFracionaria*60)/100); return $parteInteira." horas e ".$parteFracionaria." minutos."; } $paresSapatosProduzidos["João"]=10; $paresSapatosProduzidos["Tamar"]=15; $paresSapatosProduzidos["Antônio"]=10; $paresSapatosProduzidos["Tadeu"]=15; $horasTrabalhadas["João"]=8; $horasTrabalhadas["Tamar"]=10; $horasTrabalhadas["Antônio"]=8; $horasTrabalhadas["Tadeu"]=10; echo "O tempo médio necessário para se produzir um sapato pelo grupo de operários é: ".producao($paresSapatosProduzidos, $horasTrabalhadas); ?> Edited February 9, 2014 at 05:44 PM by carcleo
HappyHippyHippo Posted February 9, 2014 at 05:40 PM Report #544576 Posted February 9, 2014 at 05:40 PM fiz copy paste do código completo do qual me foi apresentado os valores correcto, por isso continuo a dizer, ou amostras os código que realmente está a apresentar esses valores ou vamos estar a dançar o tango durante muito tempo ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Carlos Rocha Posted February 9, 2014 at 05:47 PM Author Report #544577 Posted February 9, 2014 at 05:47 PM O código é bem esse mesmo. Mas, embora eu pense que não foi este o problema, notei que faltava um else: if($tamanho>2) { $parteFracionaria = (int) substr((string) $tempoMedio, strpos((string) $tempoMedio,'.')+1,2); } { $parteFracionaria = (int) substr((string) $tempoMedio, strpos((string) $tempoMedio,'.')+1,$tamanho); } Foi só adicionar if($tamanho>2) { $parteFracionaria = (int) substr((string) $tempoMedio, strpos((string) $tempoMedio,'.')+1,2); } else { $parteFracionaria = (int) substr((string) $tempoMedio, strpos((string) $tempoMedio,'.')+1,$tamanho); } E o problema se resolveu (na solução). Mas penso que o problema não foi a falta do else (que já atualizei no post acima)
HappyHippyHippo Posted February 9, 2014 at 05:52 PM Report #544578 Posted February 9, 2014 at 05:52 PM Me perdoe. Não queria fazer exatamente igual. essa afirmação não faz sentido e como tal: como queiras ... vou passar a dar sermões aos peixes que eles parecem dar mais atenção ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Rui Carlos Posted February 10, 2014 at 10:37 PM Report #544755 Posted February 10, 2014 at 10:37 PM tempoMedio = 1.388888888888915 $tamanho = (int) strlen((string) $tempoMedio) - (int) strpos((string) $tempoMedio,'.')+1; print (int) strlen((string) $tempoMedio)."<br>"; // Retorna 15 print (int) strpos((string) $tempoMedio,'.')+1; echo "<br>"; // Retorna 2 print (int) strlen((string) $tempoMedio) - (int) strpos((string) $tempoMedio,'.')+1; echo "<br>"; // Retorna 0 print $tamanho."<br>"; // Retorna 0 Correndo esta script <?php $tempoMedio = 1.388888888888915; $tamanho = (int) strlen((string) $tempoMedio) - (int) strpos((string) $tempoMedio,'.')+1; print (int) strlen((string) $tempoMedio)."<br>"; // Retorna 15 print (int) strpos((string) $tempoMedio,'.')+1; echo "<br>"; // Retorna 2 print (int) strlen((string) $tempoMedio) - (int) strpos((string) $tempoMedio,'.')+1; echo "<br>"; // Retorna 0 print $tamanho."<br>"; // Retorna 0 obtenho 15<br>2<br>15<br>15<br>. Por isso, não estou a ver de onde é que vem o teu 0. Já agora, possivelmente o que pretendes é $tamanho = (int) strlen((string) $tempoMedio) - ((int) strpos((string) $tempoMedio,'.')+1); (atenção aos parêntesis). Rui Carlos Gonçalves
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now